File: always-uniform-gmir.mir

package info (click to toggle)
llvm-toolchain-16 1%3A16.0.6-15~deb11u2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,634,820 kB
  • sloc: cpp: 6,179,261; ansic: 1,216,205; asm: 741,319; python: 196,614; objc: 75,325; f90: 49,640; lisp: 32,396; pascal: 12,286; sh: 9,394; perl: 7,442; ml: 5,494; awk: 3,523; makefile: 2,723; javascript: 1,206; xml: 886; fortran: 581; cs: 573
file content (130 lines) | stat: -rw-r--r-- 4,794 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# NOTE: This file is Generic MIR translation of test/Analysis/DivergenceAnalysis/AMDGPU/always_uniform.ll test file
# RUN: llc -mtriple=amdgcn-- -run-pass=print-machine-uniformity -o - %s 2>&1 | FileCheck %s
---
name:            readfirstlane
body:             |
  bb.1:
    ; CHECK-LABEL: MachineUniformityInfo for function: readfirstlane
    ; CHECK: DIVERGENT: %{{[0-9]+}}
    ; CHECK-SAME:llvm.amdgcn.workitem.id.x
    ; CHECK-NOT: DIVERGENT: {{.*}}llvm.amdgcn.readfirstlane
    %6:_(p1) = G_IMPLICIT_DEF
    %4:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.workitem.id.x)
    %5:_(s32) = G_INTRINSIC intrinsic(@llvm.amdgcn.readfirstlane), %4(s32)
    G_STORE %5(s32), %6(p1) :: (store (s32) into `i32 addrspace(1)* undef`, addrspace 1)
    S_ENDPGM 0
...
---
name:            icmp
body:             |
  bb.1:
    liveins: $sgpr4_sgpr5
    ; CHECK-LABEL: MachineUniformityInfo for function: icmp
    ; CHECK-NEXT: ALL VALUES UNIFORM

    %3:_(p4) = COPY $sgpr4_sgpr5
    %13:_(s32) = G_CONSTANT i32 0
    %7:_(p4) = G_INTRINSIC intrinsic(@llvm.amdgcn.kernarg.segment.ptr)
    %8:_(s32) = G_LOAD %7(p4) :: (dereferenceable invariant load (s32), align 16, addrspace 4)
    %9:_(s64) = G_CONSTANT i64 8
    %10:_(p4) = G_PTR_ADD %7, %9(s64)
    %11:_(p1) = G_LOAD %10(p4) :: (dereferenceable invariant load (p1), addrspace 4)
    %12:_(s64) = G_INTRINSIC intrinsic(@llvm.amdgcn.icmp), %8(s32), %13(s32), 33
    G_STORE %12(s64), %11(p1) :: (volatile store (s64) , addrspace 1)
    S_ENDPGM 0

...
---
name:            fcmp
body:             |
  bb.1:
    liveins: $sgpr4_sgpr5
    ; CHECK-LABEL: MachineUniformityInfo for function: fcmp
    ; CHECK-NEXT: ALL VALUES UNIFORM

    %3:_(p4) = COPY $sgpr4_sgpr5
    %10:_(s32) = G_CONSTANT i32 0
    %12:_(s32) = G_CONSTANT i32 1
    %16:_(p1) = G_IMPLICIT_DEF
    %7:_(p4) = G_INTRINSIC intrinsic(@llvm.amdgcn.kernarg.segment.ptr)
    %8:_(<2 x s32>) = G_LOAD %7(p4) :: (dereferenceable invariant load (<2 x s32>) , align 16, addrspace 4)
    %9:_(s32) = G_EXTRACT_VECTOR_ELT %8(<2 x s32>), %10(s32)
    %11:_(s32) = G_EXTRACT_VECTOR_ELT %8(<2 x s32>), %12(s32)
    %13:_(s64) = G_CONSTANT i64 4
    %14:_(p4) = G_PTR_ADD %7, %13(s64)
    %15:_(s64) = G_INTRINSIC intrinsic(@llvm.amdgcn.fcmp), %9(s32), %11(s32), 33
    G_STORE %15(s64), %16(p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1)
    S_ENDPGM 0

...
---
name:            ballot
body:             |
  bb.1:
    liveins: $sgpr4_sgpr5
    ; CHECK-LABEL: MachineUniformityInfo for function: ballot
    ; CHECK-NEXT: ALL VALUES UNIFORM

    %2:_(p4) = COPY $sgpr4_sgpr5
    %10:_(p1) = G_IMPLICIT_DEF
    %6:_(p4) = G_INTRINSIC intrinsic(@llvm.amdgcn.kernarg.segment.ptr)
    %7:_(s32) = G_LOAD %6(p4) :: (dereferenceable invariant load (s32), align 16, addrspace 4)
    %8:_(s1) = G_TRUNC %7(s32)
    %9:_(s64) = G_INTRINSIC intrinsic(@llvm.amdgcn.ballot), %8(s1)
    G_STORE %9(s64), %10(p1) :: (volatile store (s64) into `i64 addrspace(1)* undef`, addrspace 1)
    S_ENDPGM 0

...
---
name:            asm_sgpr
registers:
  - { id: 0, class: _, preferred-register: '' }
  - { id: 1, class: sreg_32, preferred-register: '' }
  - { id: 2, class: vgpr_32, preferred-register: '' }
  - { id: 3, class: _, preferred-register: '' }
body:             |
  bb.0:
    liveins: $vgpr0
    ; CHECK-LABEL: MachineUniformityInfo for function: asm_sgpr
    ; CHECK-NOT: DIVERGENT: %1

    %0:_(s32) = COPY $vgpr0
    %2:vgpr_32 = COPY %0(s32)
    INLINEASM &"; def $0, $1", 0 /* attdialect */, 1966090 /* regdef:SReg_32 */, def %1, 1835017 /* reguse:VGPR_32 */, %2
    %3:_(s32) = COPY %1
    $vgpr0 = COPY %3(s32)
    SI_RETURN implicit $vgpr0

...

# FIXME :: BELOW INLINE ASM SHOULD BE DIVERGENT
---
name:            asm_mixed_sgpr_vgpr
registers:
  - { id: 0, class: _, preferred-register: '' }
  - { id: 1, class: sreg_32, preferred-register: '' }
  - { id: 2, class: vgpr_32, preferred-register: '' }
  - { id: 3, class: vgpr_32, preferred-register: '' }
  - { id: 4, class: _, preferred-register: '' }
  - { id: 5, class: _, preferred-register: '' }
  - { id: 6, class: _, preferred-register: '' }
liveins:         []
frameInfo:
body:             |
  bb.0:
    liveins: $vgpr0
    ; CHECK-LABEL: MachineUniformityInfo for function: asm_mixed_sgpr_vgpr
    ; CHECK: DIVERGENT: %0:
    ; CHECK: DIVERGENT: %3:
    ; CHECK: DIVERGENT: %2:
    ; CHECK: DIVERGENT: %5:
    %0:_(s32) = COPY $vgpr0
    %6:_(p1) = G_IMPLICIT_DEF
    %3:vgpr_32 = COPY %0(s32)
    INLINEASM &"; def $0, $1, $2", 0 /* attdialect */, 1966090 /* regdef:SReg_32 */, def %1, 1835018 /* regdef:VGPR_32 */, def %2, 1835017 /* reguse:VGPR_32 */, %3
    %4:_(s32) = COPY %1
    %5:_(s32) = COPY %2
    G_STORE %5(s32), %6(p1) :: (store (s32) into `i32 addrspace(1)* undef`, addrspace 1)
    SI_RETURN

...