1
1
; RUN: llc -mtriple=spirv-unknown-vulkan-compute -O0 %s -o - -verify-machineinstrs | FileCheck %s --match-full-lines
2
2
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - -filetype=obj | spirv-val %}
3
3
4
+ ; NOTE: Many BB have 2 reg2mem registers: one for the register usage moved
5
+ ; to memory, and a second one just after caused by a PHI node.
6
+
4
7
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-G1"
5
8
target triple = "spirv-unknown-vulkan-compute"
6
9
26
29
}
27
30
28
31
29
- ; CHECK-DAG: OpName %[[#reg_0 :]] "cond.reg2mem "
30
- ; CHECK-DAG: OpName %[[#reg_1 :]] "cond9.reg2mem "
32
+ ; CHECK-DAG: OpName %[[#a :]] "a "
33
+ ; CHECK-DAG: OpName %[[#b :]] "b "
31
34
32
35
define internal spir_func void @main () #0 {
33
36
; CHECK: OpSelectionMerge %[[#cond1_merge:]] None
@@ -39,21 +42,27 @@ entry:
39
42
br i1 true , label %cond1_true , label %cond1_false
40
43
41
44
; CHECK: %[[#cond1_true]] = OpLabel
42
- ; CHECK: OpStore %[[#reg_0]] %[[#]]
45
+ ; CHECK: %[[#tmp1:]] = OpLoad %[[#]] %[[#a]] Aligned 4
46
+ ; CHECK: OpStore %[[#tmp2:]] %[[#tmp1]] Aligned 4
47
+ ; CHECK: %[[#tmp3:]] = OpLoad %[[#]] %[[#tmp2]] Aligned 4
48
+ ; CHECK: OpStore %[[#r2m:]] %[[#tmp3]] Aligned 4
43
49
; CHECK: OpBranch %[[#cond1_merge]]
44
50
cond1_true:
45
51
%2 = load i32 , ptr %a , align 4
46
52
br label %cond1_merge
47
53
48
54
; CHECK: %[[#cond1_false]] = OpLabel
49
- ; CHECK: OpStore %[[#reg_0]] %[[#]]
55
+ ; CHECK: %[[#tmp1:]] = OpLoad %[[#]] %[[#b]] Aligned 4
56
+ ; CHECK: OpStore %[[#tmp2:]] %[[#tmp1]] Aligned 4
57
+ ; CHECK: %[[#tmp3:]] = OpLoad %[[#]] %[[#tmp2]] Aligned 4
58
+ ; CHECK: OpStore %[[#r2m]] %[[#tmp3]] Aligned 4
50
59
; CHECK: OpBranch %[[#cond1_merge]]
51
60
cond1_false:
52
61
%3 = load i32 , ptr %b , align 4
53
62
br label %cond1_merge
54
63
55
64
; CHECK: %[[#cond1_merge]] = OpLabel
56
- ; CHECK: %[[#tmp:]] = OpLoad %[[#]] %[[#reg_0]]
65
+ ; CHECK: %[[#tmp:]] = OpLoad %[[#]] %[[#r2m]] Aligned 4
57
66
; CHECK: %[[#cond:]] = OpINotEqual %[[#]] %[[#tmp]] %[[#]]
58
67
; CHECK: OpSelectionMerge %[[#cond2_merge:]] None
59
68
; CHECK: OpBranchConditional %[[#cond]] %[[#cond2_true:]] %[[#cond2_merge]]
@@ -69,32 +78,36 @@ cond2_true:
69
78
br label %cond2_merge
70
79
71
80
; CHECK: %[[#cond2_merge]] = OpLabel
72
- ; CHECK: OpFunctionCall
81
+ ; CHECK: %[[#]] = OpFunctionCall %[[#]] %[[#]]
73
82
; CHECK: OpSelectionMerge %[[#cond3_merge:]] None
74
83
; CHECK: OpBranchConditional %[[#]] %[[#cond3_true:]] %[[#cond3_false:]]
75
84
cond2_merge:
76
85
%call2 = call spir_func noundef i32 @fn () #4 [ "convergencectrl" (token %0 ) ]
77
86
br i1 true , label %cond3_true , label %cond3_false
78
87
79
88
; CHECK: %[[#cond3_true]] = OpLabel
80
- ; CHECK: OpFunctionCall
81
- ; CHECK: OpStore %[[#reg_1]] %[[#]]
89
+ ; CHECK: %[[#tmp1:]] = OpFunctionCall %[[#]] %[[#]]
90
+ ; CHECK: OpStore %[[#tmp2:]] %[[#tmp1]] Aligned 4
91
+ ; CHECK: %[[#tmp3:]] = OpLoad %[[#]] %[[#tmp2]] Aligned 4
92
+ ; CHECK: OpStore %[[#r2m2:]] %[[#tmp3]] Aligned 4
82
93
; CHECK: OpBranch %[[#cond3_merge]]
83
94
cond3_true:
84
95
%call5 = call spir_func noundef i32 @fn1 () #4 [ "convergencectrl" (token %0 ) ]
85
96
br label %cond3_merge
86
97
87
98
; CHECK: %[[#cond3_false]] = OpLabel
88
- ; CHECK: OpFunctionCall
89
- ; CHECK: OpStore %[[#reg_1]] %[[#]]
99
+ ; CHECK: %[[#tmp1:]] = OpFunctionCall %[[#]] %[[#]]
100
+ ; CHECK: OpStore %[[#tmp2:]] %[[#tmp1]] Aligned 4
101
+ ; CHECK: %[[#tmp3:]] = OpLoad %[[#]] %[[#tmp2]] Aligned 4
102
+ ; CHECK: OpStore %[[#r2m2]] %[[#tmp3]] Aligned 4
90
103
; CHECK: OpBranch %[[#cond3_merge]]
91
104
cond3_false:
92
105
%call7 = call spir_func noundef i32 @fn2 () #4 [ "convergencectrl" (token %0 ) ]
93
106
br label %cond3_merge
94
107
95
108
; CHECK: %[[#cond3_merge]] = OpLabel
96
- ; CHECK: %[[#tmp:]] = OpLoad %[[#]] %[[#reg_1]]
97
- ; CHECK: %[[#cond:]] = OpINotEqual %[[#]] %[[#tmp]] %[[#]]
109
+ ; CHECK: %[[#tmp:]] = OpLoad %[[#]] %[[#r2m2]] Aligned 4
110
+ ; CHECK: %[[#cond:]] = OpINotEqual %[[#]] %[[#tmp]] %[[#]]
98
111
; CHECK: OpSelectionMerge %[[#cond4_merge:]] None
99
112
; CHECK: OpBranchConditional %[[#cond]] %[[#cond4_true:]] %[[#cond4_merge]]
100
113
cond3_merge:
0 commit comments