xref: /llvm-project/llvm/test/Transforms/OpenMP/value-simplify-openmp-opt.ll (revision 07ed8187acc31ac3f4779da452864a29d48799ac)
14e0f464cSJohannes Doerfert; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals
24e0f464cSJohannes Doerfert; RUN: opt -aa-pipeline=basic-aa -passes=openmp-opt -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
34e0f464cSJohannes Doerfert; RUN: opt -aa-pipeline=basic-aa -passes=openmp-opt-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
44e0f464cSJohannes Doerfert
54e0f464cSJohannes Doerferttarget triple = "amdgcn-amd-amdhsa"
64e0f464cSJohannes Doerfert
73de645efSJohannes Doerfert%struct.ConfigurationEnvironmentTy = type { i8, i8, i8, i32, i32, i32, i32, i32, i32 }
810068cd6SShilei Tian%struct.KernelEnvironmentTy = type { %struct.ConfigurationEnvironmentTy, ptr, ptr }
94e0f464cSJohannes Doerfert
104e0f464cSJohannes Doerfert@G = internal addrspace(3) global i32 undef, align 4
115238df7eSJohannes Doerfert@H = internal addrspace(3) global i32 undef, align 4
12578d5073SJohannes Doerfert@X = internal addrspace(3) global i32 undef, align 4
133a3ea430SJohannes Doerfert@QA1 = internal addrspace(3) global i32 undef, align 4
143a3ea430SJohannes Doerfert@QB1 = internal addrspace(3) global i32 undef, align 4
153a3ea430SJohannes Doerfert@QC1 = internal addrspace(3) global i32 undef, align 4
163a3ea430SJohannes Doerfert@QD1 = internal addrspace(3) global i32 undef, align 4
173a3ea430SJohannes Doerfert@QA2 = internal addrspace(3) global i32 undef, align 4
183a3ea430SJohannes Doerfert@QB2 = internal addrspace(3) global i32 undef, align 4
193a3ea430SJohannes Doerfert@QC2 = internal addrspace(3) global i32 undef, align 4
203a3ea430SJohannes Doerfert@QD2 = internal addrspace(3) global i32 undef, align 4
213a3ea430SJohannes Doerfert@QA3 = internal addrspace(3) global i32 undef, align 4
223a3ea430SJohannes Doerfert@QB3 = internal addrspace(3) global i32 undef, align 4
233a3ea430SJohannes Doerfert@QC3 = internal addrspace(3) global i32 undef, align 4
243a3ea430SJohannes Doerfert@QD3 = internal addrspace(3) global i32 undef, align 4
254009f84dSJohannes Doerfert@UAA1 = internal addrspace(3) global i32 undef, align 4
264009f84dSJohannes Doerfert@UAA2 = internal addrspace(3) global i32 undef, align 4
270cd8a289SJohannes Doerfert@UAA3 = internal addrspace(3) global i32 undef, align 4
280cd8a289SJohannes Doerfert@UANA1 = internal addrspace(3) global i32 undef, align 4
297bc88cbeSJohannes Doerfert@str = private unnamed_addr addrspace(4) constant [1 x i8] c"\00", align 1
303de645efSJohannes Doerfert@kernel_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr null, ptr null }
314e0f464cSJohannes Doerfert
324e0f464cSJohannes Doerfert; Make sure we do not delete the stores to @G without also replacing the load with `1`.
334e0f464cSJohannes Doerfert;.
34cd3a4c31SJohannes Doerfert; CHECK: @G = internal addrspace(3) global i32 undef, align 4
35cd3a4c31SJohannes Doerfert; CHECK: @H = internal addrspace(3) global i32 undef, align 4
36cd3a4c31SJohannes Doerfert; CHECK: @X = internal addrspace(3) global i32 undef, align 4
37cd3a4c31SJohannes Doerfert; CHECK: @QA1 = internal addrspace(3) global i32 undef, align 4
38cd3a4c31SJohannes Doerfert; CHECK: @QB1 = internal addrspace(3) global i32 undef, align 4
39cd3a4c31SJohannes Doerfert; CHECK: @QC1 = internal addrspace(3) global i32 undef, align 4
40cd3a4c31SJohannes Doerfert; CHECK: @QD1 = internal addrspace(3) global i32 undef, align 4
41cd3a4c31SJohannes Doerfert; CHECK: @QA2 = internal addrspace(3) global i32 undef, align 4
42cd3a4c31SJohannes Doerfert; CHECK: @QB2 = internal addrspace(3) global i32 undef, align 4
43cd3a4c31SJohannes Doerfert; CHECK: @QC2 = internal addrspace(3) global i32 undef, align 4
44cd3a4c31SJohannes Doerfert; CHECK: @QD2 = internal addrspace(3) global i32 undef, align 4
45cd3a4c31SJohannes Doerfert; CHECK: @QA3 = internal addrspace(3) global i32 undef, align 4
46cd3a4c31SJohannes Doerfert; CHECK: @QB3 = internal addrspace(3) global i32 undef, align 4
47cd3a4c31SJohannes Doerfert; CHECK: @QC3 = internal addrspace(3) global i32 undef, align 4
48cd3a4c31SJohannes Doerfert; CHECK: @QD3 = internal addrspace(3) global i32 undef, align 4
49cd3a4c31SJohannes Doerfert; CHECK: @UAA1 = internal addrspace(3) global i32 undef, align 4
50cd3a4c31SJohannes Doerfert; CHECK: @UAA2 = internal addrspace(3) global i32 undef, align 4
51cd3a4c31SJohannes Doerfert; CHECK: @UAA3 = internal addrspace(3) global i32 undef, align 4
52cd3a4c31SJohannes Doerfert; CHECK: @UANA1 = internal addrspace(3) global i32 undef, align 4
53cd3a4c31SJohannes Doerfert; CHECK: @str = private unnamed_addr addrspace(4) constant [1 x i8] zeroinitializer, align 1
54cd3a4c31SJohannes Doerfert; CHECK: @kernel_kernel_environment = local_unnamed_addr constant %struct.KernelEnvironmentTy { %struct.ConfigurationEnvironmentTy { i8 0, i8 0, i8 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0 }, ptr null, ptr null }
554e0f464cSJohannes Doerfert;.
56*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel(ptr %dyn) "kernel" {
574e0f464cSJohannes Doerfert;
5877dbd1d7SJohannes Doerfert; TUNIT: Function Attrs: norecurse
5977dbd1d7SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel
60b8cbc5c0SJohannes Doerfert; TUNIT-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
61b8cbc5c0SJohannes Doerfert; TUNIT-NEXT:    [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr [[DYN]])
6277dbd1d7SJohannes Doerfert; TUNIT-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
6377dbd1d7SJohannes Doerfert; TUNIT-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
6477dbd1d7SJohannes Doerfert; TUNIT:       if.then:
6577dbd1d7SJohannes Doerfert; TUNIT-NEXT:    br label [[IF_MERGE:%.*]]
6677dbd1d7SJohannes Doerfert; TUNIT:       if.else:
6777dbd1d7SJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR6:[0-9]+]]
687e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 1) #[[ATTR7:[0-9]+]]
697e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @llvm.assume(i1 true)
7077dbd1d7SJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR6]]
7177dbd1d7SJohannes Doerfert; TUNIT-NEXT:    br label [[IF_MERGE]]
7277dbd1d7SJohannes Doerfert; TUNIT:       if.merge:
7377dbd1d7SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
7477dbd1d7SJohannes Doerfert; TUNIT-NEXT:    br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
7577dbd1d7SJohannes Doerfert; TUNIT:       if.then2:
7677dbd1d7SJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR6]]
7777dbd1d7SJohannes Doerfert; TUNIT-NEXT:    br label [[IF_END]]
7877dbd1d7SJohannes Doerfert; TUNIT:       if.end:
7910068cd6SShilei Tian; TUNIT-NEXT:    call void @__kmpc_target_deinit()
8077dbd1d7SJohannes Doerfert; TUNIT-NEXT:    ret void
8177dbd1d7SJohannes Doerfert;
8277dbd1d7SJohannes Doerfert; CGSCC: Function Attrs: norecurse
8377dbd1d7SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel
84b8cbc5c0SJohannes Doerfert; CGSCC-SAME: (ptr [[DYN:%.*]]) #[[ATTR0:[0-9]+]] {
85b8cbc5c0SJohannes Doerfert; CGSCC-NEXT:    [[CALL:%.*]] = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr [[DYN]])
8677dbd1d7SJohannes Doerfert; CGSCC-NEXT:    [[CMP:%.*]] = icmp eq i32 [[CALL]], -1
8777dbd1d7SJohannes Doerfert; CGSCC-NEXT:    br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
8877dbd1d7SJohannes Doerfert; CGSCC:       if.then:
8977dbd1d7SJohannes Doerfert; CGSCC-NEXT:    br label [[IF_MERGE:%.*]]
9077dbd1d7SJohannes Doerfert; CGSCC:       if.else:
9177dbd1d7SJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6:[0-9]+]]
927e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 1) #[[ATTR6]]
937e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @llvm.assume(i1 true)
9477dbd1d7SJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
9577dbd1d7SJohannes Doerfert; CGSCC-NEXT:    br label [[IF_MERGE]]
9677dbd1d7SJohannes Doerfert; CGSCC:       if.merge:
9777dbd1d7SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
9877dbd1d7SJohannes Doerfert; CGSCC-NEXT:    br i1 [[CMP]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]]
9977dbd1d7SJohannes Doerfert; CGSCC:       if.then2:
10077dbd1d7SJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
10177dbd1d7SJohannes Doerfert; CGSCC-NEXT:    br label [[IF_END]]
10277dbd1d7SJohannes Doerfert; CGSCC:       if.end:
10310068cd6SShilei Tian; CGSCC-NEXT:    call void @__kmpc_target_deinit()
10477dbd1d7SJohannes Doerfert; CGSCC-NEXT:    ret void
1054e0f464cSJohannes Doerfert;
106b8cbc5c0SJohannes Doerfert  %call = call i32 @__kmpc_target_init(ptr @kernel_kernel_environment, ptr %dyn)
1074e0f464cSJohannes Doerfert  %cmp = icmp eq i32 %call, -1
1084e0f464cSJohannes Doerfert  br i1 %cmp, label %if.then, label %if.else
1094e0f464cSJohannes Doerfertif.then:
110aa8e9facSNikita Popov  store i32 1, ptr addrspace(3) @G
1115238df7eSJohannes Doerfert  store i32 2, ptr addrspace(3) @H
1124e0f464cSJohannes Doerfert  br label %if.merge
1134e0f464cSJohannes Doerfertif.else:
1144e0f464cSJohannes Doerfert  call void @barrier();
115aa8e9facSNikita Popov  %l = load i32, ptr addrspace(3) @G
1164e0f464cSJohannes Doerfert  call void @use1(i32 %l)
1175238df7eSJohannes Doerfert  %hv = load i32, ptr addrspace(3) @H
1185238df7eSJohannes Doerfert  %hc = icmp eq i32 %hv, 2
1195238df7eSJohannes Doerfert  call void @llvm.assume(i1 %hc)
1205238df7eSJohannes Doerfert  call void @barrier();
1214e0f464cSJohannes Doerfert  br label %if.merge
1224e0f464cSJohannes Doerfertif.merge:
1235238df7eSJohannes Doerfert  %hreload = load i32, ptr addrspace(3) @H
1245238df7eSJohannes Doerfert  call void @use1(i32 %hreload)
1254e0f464cSJohannes Doerfert  br i1 %cmp, label %if.then2, label %if.end
1264e0f464cSJohannes Doerfertif.then2:
127aa8e9facSNikita Popov  store i32 2, ptr addrspace(3) @G
1284e0f464cSJohannes Doerfert  call void @barrier();
1294e0f464cSJohannes Doerfert  br label %if.end
1304e0f464cSJohannes Doerfertif.end:
13110068cd6SShilei Tian  call void @__kmpc_target_deinit()
1324e0f464cSJohannes Doerfert  ret void
1334e0f464cSJohannes Doerfert}
1344e0f464cSJohannes Doerfert
1357bc88cbeSJohannes Doerfertdefine void @test_assume() {
1367bc88cbeSJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@test_assume() {
137deab451eSNikita Popov; CHECK-NEXT:    [[CMP:%.*]] = icmp ne ptr addrspacecast (ptr addrspace(4) @str to ptr), null
138deab451eSNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[CMP]])
1397bc88cbeSJohannes Doerfert; CHECK-NEXT:    ret void
1407bc88cbeSJohannes Doerfert;
141deab451eSNikita Popov  %cmp = icmp ne ptr addrspacecast (ptr addrspace(4) @str to ptr), null
142deab451eSNikita Popov  call void @llvm.assume(i1 %cmp)
1437bc88cbeSJohannes Doerfert  ret void
1447bc88cbeSJohannes Doerfert}
1457bc88cbeSJohannes Doerfert
146578d5073SJohannes Doerfert; We can't ignore the sync, hence this might store 2 into %p
147*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel2(ptr %p) "kernel" {
148578d5073SJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@kernel2
149578d5073SJohannes Doerfert; CHECK-SAME: (ptr [[P:%.*]]) #[[ATTR1:[0-9]+]] {
150578d5073SJohannes Doerfert; CHECK-NEXT:    store i32 1, ptr addrspace(3) @X, align 4
151578d5073SJohannes Doerfert; CHECK-NEXT:    call void @sync()
152578d5073SJohannes Doerfert; CHECK-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4
153578d5073SJohannes Doerfert; CHECK-NEXT:    store i32 2, ptr addrspace(3) @X, align 4
154578d5073SJohannes Doerfert; CHECK-NEXT:    store i32 [[V]], ptr [[P]], align 4
155578d5073SJohannes Doerfert; CHECK-NEXT:    ret void
156578d5073SJohannes Doerfert;
157578d5073SJohannes Doerfert  store i32 1, ptr addrspace(3) @X
158578d5073SJohannes Doerfert  call void @sync()
159578d5073SJohannes Doerfert  %v = load i32, ptr addrspace(3) @X
160578d5073SJohannes Doerfert  store i32 2, ptr addrspace(3) @X
161578d5073SJohannes Doerfert  store i32 %v, ptr %p
162578d5073SJohannes Doerfert  ret void
163578d5073SJohannes Doerfert}
164578d5073SJohannes Doerfert
165578d5073SJohannes Doerfert; We can't ignore the sync, hence this might store 2 into %p
166*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel3(ptr %p) "kernel" {
167578d5073SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel3
168578d5073SJohannes Doerfert; TUNIT-SAME: (ptr [[P:%.*]]) #[[ATTR1]] {
169578d5073SJohannes Doerfert; TUNIT-NEXT:    store i32 1, ptr addrspace(3) @X, align 4
170578d5073SJohannes Doerfert; TUNIT-NEXT:    call void @sync_def.internalized()
171578d5073SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4
172578d5073SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @X, align 4
173578d5073SJohannes Doerfert; TUNIT-NEXT:    store i32 [[V]], ptr [[P]], align 4
174578d5073SJohannes Doerfert; TUNIT-NEXT:    ret void
175578d5073SJohannes Doerfert;
176578d5073SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel3
177578d5073SJohannes Doerfert; CGSCC-SAME: (ptr [[P:%.*]]) #[[ATTR1]] {
178578d5073SJohannes Doerfert; CGSCC-NEXT:    store i32 1, ptr addrspace(3) @X, align 4
179578d5073SJohannes Doerfert; CGSCC-NEXT:    call void @sync_def()
180578d5073SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @X, align 4
181578d5073SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @X, align 4
182578d5073SJohannes Doerfert; CGSCC-NEXT:    store i32 [[V]], ptr [[P]], align 4
183578d5073SJohannes Doerfert; CGSCC-NEXT:    ret void
184578d5073SJohannes Doerfert;
185578d5073SJohannes Doerfert  store i32 1, ptr addrspace(3) @X
186578d5073SJohannes Doerfert  call void @sync_def()
187578d5073SJohannes Doerfert  %v = load i32, ptr addrspace(3) @X
188578d5073SJohannes Doerfert  store i32 2, ptr addrspace(3) @X
189578d5073SJohannes Doerfert  store i32 %v, ptr %p
190578d5073SJohannes Doerfert  ret void
191578d5073SJohannes Doerfert}
192578d5073SJohannes Doerfert
193578d5073SJohannes Doerfertdefine void @sync_def() {
194578d5073SJohannes Doerfert; CHECK-LABEL: define {{[^@]+}}@sync_def() {
195578d5073SJohannes Doerfert; CHECK-NEXT:    call void @sync()
196578d5073SJohannes Doerfert; CHECK-NEXT:    ret void
197578d5073SJohannes Doerfert;
198578d5073SJohannes Doerfert  call void @sync()
199578d5073SJohannes Doerfert  ret void
200578d5073SJohannes Doerfert}
201578d5073SJohannes Doerfert
202*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a1(i1 %c) "kernel" {
2033a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a1
2043a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
2053a3ea430SJohannes Doerfert; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @QA1, align 4
2063a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2073a3ea430SJohannes Doerfert; TUNIT:       L:
2083a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
2093a3ea430SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QA1, align 4
2103a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 [[V]]) #[[ATTR7]]
2113a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2123a3ea430SJohannes Doerfert; TUNIT:       S:
2133a3ea430SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @QA1, align 4
2143a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
2153a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2163a3ea430SJohannes Doerfert;
2173a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a1
2183a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
2193a3ea430SJohannes Doerfert; CGSCC-NEXT:    store i32 0, ptr addrspace(3) @QA1, align 4
2203a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2213a3ea430SJohannes Doerfert; CGSCC:       L:
2223a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
2233a3ea430SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QA1, align 4
2243a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 [[V]]) #[[ATTR6]]
2253a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
2263a3ea430SJohannes Doerfert; CGSCC:       S:
2273a3ea430SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @QA1, align 4
2283a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
2293a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
2303a3ea430SJohannes Doerfert;
2313a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QA1
2323a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
2333a3ea430SJohannes DoerfertL:
2343a3ea430SJohannes Doerfert  call void @sync();
2353a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QA1
2363a3ea430SJohannes Doerfert  call void @use1(i32 %v)
2373a3ea430SJohannes Doerfert  ret void
2383a3ea430SJohannes DoerfertS:
2393a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QA1
2403a3ea430SJohannes Doerfert  call void @sync();
2413a3ea430SJohannes Doerfert  ret void
2423a3ea430SJohannes Doerfert}
2433a3ea430SJohannes Doerfert
24424656e99SJohannes Doerfert; We should not replace the load or delete the second store.
245*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b1(i1 %c) "kernel" {
2463a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b1
2473a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
24824656e99SJohannes Doerfert; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @QB1, align 4
2493a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2503a3ea430SJohannes Doerfert; TUNIT:       L:
2513a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
25224656e99SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QB1, align 4
25324656e99SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 [[V]]) #[[ATTR7]]
2543a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2553a3ea430SJohannes Doerfert; TUNIT:       S:
25624656e99SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @QB1, align 4
2573a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2583a3ea430SJohannes Doerfert;
2593a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b1
2603a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
26124656e99SJohannes Doerfert; CGSCC-NEXT:    store i32 0, ptr addrspace(3) @QB1, align 4
2623a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2633a3ea430SJohannes Doerfert; CGSCC:       L:
2643a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
26524656e99SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QB1, align 4
26624656e99SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 [[V]]) #[[ATTR6]]
2673a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
2683a3ea430SJohannes Doerfert; CGSCC:       S:
26924656e99SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @QB1, align 4
2703a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
2713a3ea430SJohannes Doerfert;
2723a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QB1
2733a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
2743a3ea430SJohannes DoerfertL:
2753a3ea430SJohannes Doerfert  call void @sync();
2763a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QB1
2773a3ea430SJohannes Doerfert  call void @use1(i32 %v)
2783a3ea430SJohannes Doerfert  ret void
2793a3ea430SJohannes DoerfertS:
2803a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QB1
2813a3ea430SJohannes Doerfert  ret void
2823a3ea430SJohannes Doerfert}
2833a3ea430SJohannes Doerfert
284*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a2(i1 %c) "kernel" {
2853a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a2
2863a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
2873a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2883a3ea430SJohannes Doerfert; TUNIT:       L:
2893a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
2903a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
2913a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2923a3ea430SJohannes Doerfert; TUNIT:       S:
2933a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
2943a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
2953a3ea430SJohannes Doerfert;
2963a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a2
2973a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
2983a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
2993a3ea430SJohannes Doerfert; CGSCC:       L:
3003a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3013a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
3023a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3033a3ea430SJohannes Doerfert; CGSCC:       S:
3043a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3053a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3063a3ea430SJohannes Doerfert;
3073a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
3083a3ea430SJohannes DoerfertL:
3093a3ea430SJohannes Doerfert  call void @sync();
3103a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QA2
3113a3ea430SJohannes Doerfert  call void @use1(i32 %v)
3123a3ea430SJohannes Doerfert  ret void
3133a3ea430SJohannes DoerfertS:
3143a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QA2
3153a3ea430SJohannes Doerfert  call void @sync();
3163a3ea430SJohannes Doerfert  ret void
3173a3ea430SJohannes Doerfert}
3183a3ea430SJohannes Doerfert
3193a3ea430SJohannes Doerfert; FIXME: We should not replace the load with undef.
320*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b2(i1 %c) "kernel" {
3213a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b2
3223a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
3233a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
3243a3ea430SJohannes Doerfert; TUNIT:       L:
3253a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
32624656e99SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
3273a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
3283a3ea430SJohannes Doerfert; TUNIT:       S:
3293a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
3303a3ea430SJohannes Doerfert;
3313a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b2
3323a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
3333a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
3343a3ea430SJohannes Doerfert; CGSCC:       L:
3353a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
33624656e99SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
3373a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3383a3ea430SJohannes Doerfert; CGSCC:       S:
3393a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3403a3ea430SJohannes Doerfert;
3413a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
3423a3ea430SJohannes DoerfertL:
3433a3ea430SJohannes Doerfert  call void @sync();
3443a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QB2
3453a3ea430SJohannes Doerfert  call void @use1(i32 %v)
3463a3ea430SJohannes Doerfert  ret void
3473a3ea430SJohannes DoerfertS:
3483a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QB2
3493a3ea430SJohannes Doerfert  ret void
3503a3ea430SJohannes Doerfert}
3513a3ea430SJohannes Doerfert
352*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4a3(i1 %c) "kernel" {
3533a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4a3
3543a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
3553a3ea430SJohannes Doerfert; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @QA3, align 4
3563a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
3573a3ea430SJohannes Doerfert; TUNIT:       L:
3583a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
3593a3ea430SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QA3, align 4
3603a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 [[V]]) #[[ATTR7]]
3613a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
3623a3ea430SJohannes Doerfert; TUNIT:       S:
3633a3ea430SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @QA3, align 4
3643a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
3653a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
3663a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
3673a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
3683a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
3693a3ea430SJohannes Doerfert;
3703a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4a3
3713a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
3723a3ea430SJohannes Doerfert; CGSCC-NEXT:    store i32 0, ptr addrspace(3) @QA3, align 4
3733a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
3743a3ea430SJohannes Doerfert; CGSCC:       L:
3753a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3763a3ea430SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QA3, align 4
3773a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 [[V]]) #[[ATTR6]]
3783a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3793a3ea430SJohannes Doerfert; CGSCC:       S:
3803a3ea430SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @QA3, align 4
3813a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3823a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3833a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3843a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
3853a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
3863a3ea430SJohannes Doerfert;
3873a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QA3
3883a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
3893a3ea430SJohannes DoerfertL:
3903a3ea430SJohannes Doerfert  call void @sync();
3913a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QA3
3923a3ea430SJohannes Doerfert  call void @use1(i32 %v)
3933a3ea430SJohannes Doerfert  ret void
3943a3ea430SJohannes DoerfertS:
3953a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QA3
3963a3ea430SJohannes Doerfert  call void @sync();
3973a3ea430SJohannes Doerfert  call void @sync();
3983a3ea430SJohannes Doerfert  call void @sync();
3993a3ea430SJohannes Doerfert  call void @sync();
4003a3ea430SJohannes Doerfert  ret void
4013a3ea430SJohannes Doerfert}
4023a3ea430SJohannes Doerfert
403fe12d313SJohannes Doerfert; The load of QB3 should not be simplified to 0.
404*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4b3(i1 %c) "kernel" {
4053a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4b3
4063a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
407fe12d313SJohannes Doerfert; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @QB3, align 4
4083a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
4093a3ea430SJohannes Doerfert; TUNIT:       L:
4103a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
411fe12d313SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4
412fe12d313SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 [[V]]) #[[ATTR7]]
4133a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
4143a3ea430SJohannes Doerfert; TUNIT:       S:
415fe12d313SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @QB3, align 4
4163a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 0) #[[ATTR7]]
4173a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 1) #[[ATTR7]]
4183a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
4193a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 3) #[[ATTR7]]
4203a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
4213a3ea430SJohannes Doerfert;
4223a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4b3
4233a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
424fe12d313SJohannes Doerfert; CGSCC-NEXT:    store i32 0, ptr addrspace(3) @QB3, align 4
4253a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
4263a3ea430SJohannes Doerfert; CGSCC:       L:
4273a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
428fe12d313SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QB3, align 4
429fe12d313SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 [[V]]) #[[ATTR6]]
4303a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
4313a3ea430SJohannes Doerfert; CGSCC:       S:
432fe12d313SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @QB3, align 4
4333a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 0) #[[ATTR6]]
4343a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 1) #[[ATTR6]]
4353a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
4363a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 3) #[[ATTR6]]
4373a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
4383a3ea430SJohannes Doerfert;
4393a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QB3
4403a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
4413a3ea430SJohannes DoerfertL:
4423a3ea430SJohannes Doerfert  call void @sync();
4433a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QB3
4443a3ea430SJohannes Doerfert  call void @use1(i32 %v)
4453a3ea430SJohannes Doerfert  ret void
4463a3ea430SJohannes DoerfertS:
4473a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QB3
4483a3ea430SJohannes Doerfert  call void @use1(i32 0)
4493a3ea430SJohannes Doerfert  call void @use1(i32 1)
4503a3ea430SJohannes Doerfert  call void @use1(i32 2)
4513a3ea430SJohannes Doerfert  call void @use1(i32 3)
4523a3ea430SJohannes Doerfert  ret void
4533a3ea430SJohannes Doerfert}
4543a3ea430SJohannes Doerfert
4553a3ea430SJohannes Doerfert
456*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c1(i1 %c) "kernel" {
4573a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
4583a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c1
4593a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
4603a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
4613a3ea430SJohannes Doerfert; TUNIT:       L:
4623a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 0) #[[ATTR7]]
4633a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
4643a3ea430SJohannes Doerfert; TUNIT:       S:
4653a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
4663a3ea430SJohannes Doerfert;
4673a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
4683a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c1
4693a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
4703a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
4713a3ea430SJohannes Doerfert; CGSCC:       L:
4723a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 0) #[[ATTR6]]
4733a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
4743a3ea430SJohannes Doerfert; CGSCC:       S:
4753a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
4763a3ea430SJohannes Doerfert;
4773a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QC1
4783a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
4793a3ea430SJohannes DoerfertL:
4803a3ea430SJohannes Doerfert  call void @barrier();
4813a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QC1
4823a3ea430SJohannes Doerfert  call void @use1(i32 %v)
4833a3ea430SJohannes Doerfert  ret void
4843a3ea430SJohannes DoerfertS:
4853a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QC1
4863a3ea430SJohannes Doerfert  call void @barrier();
4873a3ea430SJohannes Doerfert  ret void
4883a3ea430SJohannes Doerfert}
4893a3ea430SJohannes Doerfert
4907e77e812SJohannes Doerfert; We should not replace the load or delete the second store.
491*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d1(i1 %c) "kernel" {
4923a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
4933a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d1
4943a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
4957e77e812SJohannes Doerfert; TUNIT-NEXT:    store i32 0, ptr addrspace(3) @QD1, align 4
4963a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
4973a3ea430SJohannes Doerfert; TUNIT:       L:
4987e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR7]]
4997e77e812SJohannes Doerfert; TUNIT-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QD1, align 4
5007e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 [[V]]) #[[ATTR7]]
5013a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5023a3ea430SJohannes Doerfert; TUNIT:       S:
5037e77e812SJohannes Doerfert; TUNIT-NEXT:    store i32 2, ptr addrspace(3) @QD1, align 4
5043a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5053a3ea430SJohannes Doerfert;
5063a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
5073a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d1
5083a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
5097e77e812SJohannes Doerfert; CGSCC-NEXT:    store i32 0, ptr addrspace(3) @QD1, align 4
5103a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
5113a3ea430SJohannes Doerfert; CGSCC:       L:
5127e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
5137e77e812SJohannes Doerfert; CGSCC-NEXT:    [[V:%.*]] = load i32, ptr addrspace(3) @QD1, align 4
5147e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 [[V]]) #[[ATTR6]]
5153a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5163a3ea430SJohannes Doerfert; CGSCC:       S:
5177e77e812SJohannes Doerfert; CGSCC-NEXT:    store i32 2, ptr addrspace(3) @QD1, align 4
5183a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5193a3ea430SJohannes Doerfert;
5203a3ea430SJohannes Doerfert  store i32 0, ptr addrspace(3) @QD1
5213a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
5223a3ea430SJohannes DoerfertL:
5233a3ea430SJohannes Doerfert  call void @barrier();
5243a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QD1
5253a3ea430SJohannes Doerfert  call void @use1(i32 %v)
5263a3ea430SJohannes Doerfert  ret void
5273a3ea430SJohannes DoerfertS:
5283a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QD1
5293a3ea430SJohannes Doerfert  ret void
5303a3ea430SJohannes Doerfert}
5313a3ea430SJohannes Doerfert
532*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c2(i1 %c) "kernel" {
5333a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
5343a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c2
5353a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
5363a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
5373a3ea430SJohannes Doerfert; TUNIT:       L:
5383a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 undef) #[[ATTR7]]
5393a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5403a3ea430SJohannes Doerfert; TUNIT:       S:
5413a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5423a3ea430SJohannes Doerfert;
5433a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
5443a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c2
5453a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
5463a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
5473a3ea430SJohannes Doerfert; CGSCC:       L:
5483a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 undef) #[[ATTR6]]
5493a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5503a3ea430SJohannes Doerfert; CGSCC:       S:
5513a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5523a3ea430SJohannes Doerfert;
5533a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
5543a3ea430SJohannes DoerfertL:
5553a3ea430SJohannes Doerfert  call void @barrier();
5563a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QC2
5573a3ea430SJohannes Doerfert  call void @use1(i32 %v)
5583a3ea430SJohannes Doerfert  ret void
5593a3ea430SJohannes DoerfertS:
5603a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QC2
5613a3ea430SJohannes Doerfert  call void @barrier();
5623a3ea430SJohannes Doerfert  ret void
5633a3ea430SJohannes Doerfert}
5643a3ea430SJohannes Doerfert
5657e77e812SJohannes Doerfert; We should not replace the load with undef.
566*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d2(i1 %c) "kernel" {
5673a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
5683a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d2
5693a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
5703a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
5713a3ea430SJohannes Doerfert; TUNIT:       L:
5727e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
5733a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5743a3ea430SJohannes Doerfert; TUNIT:       S:
5753a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
5763a3ea430SJohannes Doerfert;
5773a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
5783a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d2
5793a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
5803a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
5813a3ea430SJohannes Doerfert; CGSCC:       L:
5827e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
5833a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5843a3ea430SJohannes Doerfert; CGSCC:       S:
5853a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
5863a3ea430SJohannes Doerfert;
5873a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
5883a3ea430SJohannes DoerfertL:
5893a3ea430SJohannes Doerfert  call void @barrier();
5903a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QD2
5913a3ea430SJohannes Doerfert  call void @use1(i32 %v)
5923a3ea430SJohannes Doerfert  ret void
5933a3ea430SJohannes DoerfertS:
5943a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QD2
5953a3ea430SJohannes Doerfert  ret void
5963a3ea430SJohannes Doerfert}
5973a3ea430SJohannes Doerfert
598*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4c3(i1 %c) "kernel" {
5993a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
6003a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4c3
6013a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
6023a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6033a3ea430SJohannes Doerfert; TUNIT:       L:
6043a3ea430SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 undef) #[[ATTR7]]
6053a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
6063a3ea430SJohannes Doerfert; TUNIT:       S:
6073a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
6083a3ea430SJohannes Doerfert;
6093a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
6103a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4c3
6113a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
6123a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6133a3ea430SJohannes Doerfert; CGSCC:       L:
6143a3ea430SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 undef) #[[ATTR6]]
6153a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
6163a3ea430SJohannes Doerfert; CGSCC:       S:
6173a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
6183a3ea430SJohannes Doerfert;
6193a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
6203a3ea430SJohannes DoerfertL:
6213a3ea430SJohannes Doerfert  call void @barrier();
6223a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QC3
6233a3ea430SJohannes Doerfert  call void @use1(i32 %v)
6243a3ea430SJohannes Doerfert  ret void
6253a3ea430SJohannes DoerfertS:
6263a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QC3
6273a3ea430SJohannes Doerfert  call void @barrier();
6283a3ea430SJohannes Doerfert  ret void
6293a3ea430SJohannes Doerfert}
6303a3ea430SJohannes Doerfert
6317e77e812SJohannes Doerfert; We should not replace the load with undef.
632*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel4d3(i1 %c) "kernel" {
6333a3ea430SJohannes Doerfert; TUNIT: Function Attrs: norecurse
6343a3ea430SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel4d3
6353a3ea430SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
6363a3ea430SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6373a3ea430SJohannes Doerfert; TUNIT:       L:
6387e77e812SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
6393a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
6403a3ea430SJohannes Doerfert; TUNIT:       S:
6413a3ea430SJohannes Doerfert; TUNIT-NEXT:    ret void
6423a3ea430SJohannes Doerfert;
6433a3ea430SJohannes Doerfert; CGSCC: Function Attrs: norecurse
6443a3ea430SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel4d3
6453a3ea430SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR0]] {
6463a3ea430SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6473a3ea430SJohannes Doerfert; CGSCC:       L:
6487e77e812SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
6493a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
6503a3ea430SJohannes Doerfert; CGSCC:       S:
6513a3ea430SJohannes Doerfert; CGSCC-NEXT:    ret void
6523a3ea430SJohannes Doerfert;
6533a3ea430SJohannes Doerfert  br i1 %c, label %S, label %L
6543a3ea430SJohannes DoerfertL:
6553a3ea430SJohannes Doerfert  call void @barrier();
6563a3ea430SJohannes Doerfert  %v = load i32, ptr addrspace(3) @QD3
6573a3ea430SJohannes Doerfert  call void @use1(i32 %v)
6583a3ea430SJohannes Doerfert  ret void
6593a3ea430SJohannes DoerfertS:
6603a3ea430SJohannes Doerfert  store i32 2, ptr addrspace(3) @QD3
6613a3ea430SJohannes Doerfert  ret void
6623a3ea430SJohannes Doerfert}
6633a3ea430SJohannes Doerfert
664*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned1(i1 %c) "kernel" {
6654009f84dSJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned1
6664009f84dSJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
6674009f84dSJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6684009f84dSJohannes Doerfert; TUNIT:       L:
66978b8f1f7SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
6704009f84dSJohannes Doerfert; TUNIT-NEXT:    ret void
6714009f84dSJohannes Doerfert; TUNIT:       S:
6724009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @sync()
6734009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR7]]
6744009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @sync()
6754009f84dSJohannes Doerfert; TUNIT-NEXT:    ret void
6764009f84dSJohannes Doerfert;
6774009f84dSJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned1
6784009f84dSJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
6794009f84dSJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
6804009f84dSJohannes Doerfert; CGSCC:       L:
68178b8f1f7SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
6824009f84dSJohannes Doerfert; CGSCC-NEXT:    ret void
6834009f84dSJohannes Doerfert; CGSCC:       S:
6844009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @sync()
6854009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
6864009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @sync()
6874009f84dSJohannes Doerfert; CGSCC-NEXT:    ret void
6884009f84dSJohannes Doerfert;
6894009f84dSJohannes Doerfert  br i1 %c, label %S, label %L
6904009f84dSJohannes DoerfertL:
6914009f84dSJohannes Doerfert  call void @barrier();
6924009f84dSJohannes Doerfert  %v = load i32, ptr addrspace(3) @UAA1
6934009f84dSJohannes Doerfert  call void @use1(i32 %v)
6944009f84dSJohannes Doerfert  ret void
6954009f84dSJohannes DoerfertS:
6964009f84dSJohannes Doerfert  call void @sync();
6974009f84dSJohannes Doerfert  store i32 2, ptr addrspace(3) @UAA1
6984009f84dSJohannes Doerfert  call void @barrier();
6994009f84dSJohannes Doerfert  call void @sync();
7004009f84dSJohannes Doerfert  ret void
7014009f84dSJohannes Doerfert}
7024009f84dSJohannes Doerfert
703*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned2(i1 %c) "kernel" {
7044009f84dSJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned2
7054009f84dSJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
7064009f84dSJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
7074009f84dSJohannes Doerfert; TUNIT:       L:
7084009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @sync()
70978b8f1f7SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
7104009f84dSJohannes Doerfert; TUNIT-NEXT:    ret void
7114009f84dSJohannes Doerfert; TUNIT:       S:
7124009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7134009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR7]]
7144009f84dSJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7154009f84dSJohannes Doerfert; TUNIT-NEXT:    ret void
7164009f84dSJohannes Doerfert;
7174009f84dSJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned2
7184009f84dSJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
7194009f84dSJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
7204009f84dSJohannes Doerfert; CGSCC:       L:
7214009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @sync()
72278b8f1f7SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
7234009f84dSJohannes Doerfert; CGSCC-NEXT:    ret void
7244009f84dSJohannes Doerfert; CGSCC:       S:
7254009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @sync()
7264009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
7274009f84dSJohannes Doerfert; CGSCC-NEXT:    call void @sync()
7284009f84dSJohannes Doerfert; CGSCC-NEXT:    ret void
7294009f84dSJohannes Doerfert;
7304009f84dSJohannes Doerfert  br i1 %c, label %S, label %L
7314009f84dSJohannes DoerfertL:
7324009f84dSJohannes Doerfert  call void @sync();
7334009f84dSJohannes Doerfert  %v = load i32, ptr addrspace(3) @UAA2
7344009f84dSJohannes Doerfert  call void @use1(i32 %v)
7354009f84dSJohannes Doerfert  ret void
7364009f84dSJohannes DoerfertS:
7374009f84dSJohannes Doerfert  call void @sync();
7384009f84dSJohannes Doerfert  store i32 2, ptr addrspace(3) @UAA2
7394009f84dSJohannes Doerfert  call void @barrier();
7404009f84dSJohannes Doerfert  call void @sync();
7414009f84dSJohannes Doerfert  ret void
7424009f84dSJohannes Doerfert}
7434009f84dSJohannes Doerfert
744*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_aligned3(i1 %c) "kernel" {
7450cd8a289SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned3
7460cd8a289SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
7470cd8a289SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
7480cd8a289SJohannes Doerfert; TUNIT:       L:
7490cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7500cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
7510cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @barrier() #[[ATTR7]]
7520cd8a289SJohannes Doerfert; TUNIT-NEXT:    ret void
7530cd8a289SJohannes Doerfert; TUNIT:       S:
7540cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7550cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7560cd8a289SJohannes Doerfert; TUNIT-NEXT:    ret void
7570cd8a289SJohannes Doerfert;
7580cd8a289SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_aligned3
7590cd8a289SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
7600cd8a289SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
7610cd8a289SJohannes Doerfert; CGSCC:       L:
7620cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
7630cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
7640cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @barrier() #[[ATTR6]]
7650cd8a289SJohannes Doerfert; CGSCC-NEXT:    ret void
7660cd8a289SJohannes Doerfert; CGSCC:       S:
7670cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
7680cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
7690cd8a289SJohannes Doerfert; CGSCC-NEXT:    ret void
7700cd8a289SJohannes Doerfert;
7710cd8a289SJohannes Doerfert  br i1 %c, label %S, label %L
7720cd8a289SJohannes DoerfertL:
7730cd8a289SJohannes Doerfert  call void @sync();
7740cd8a289SJohannes Doerfert  %v = load i32, ptr addrspace(3) @UAA3
7750cd8a289SJohannes Doerfert  call void @use1(i32 %v)
7760cd8a289SJohannes Doerfert  call void @barrier();
7770cd8a289SJohannes Doerfert  ret void
7780cd8a289SJohannes DoerfertS:
7790cd8a289SJohannes Doerfert  call void @sync();
7800cd8a289SJohannes Doerfert  store i32 2, ptr addrspace(3) @UAA3
7810cd8a289SJohannes Doerfert  call void @sync();
7820cd8a289SJohannes Doerfert  ret void
7830cd8a289SJohannes Doerfert}
7840cd8a289SJohannes Doerfert
785*07ed8187SAlex MacLeandefine amdgpu_kernel void @kernel_unknown_and_not_aligned1(i1 %c) "kernel" {
7860cd8a289SJohannes Doerfert; TUNIT-LABEL: define {{[^@]+}}@kernel_unknown_and_not_aligned1
7870cd8a289SJohannes Doerfert; TUNIT-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
7880cd8a289SJohannes Doerfert; TUNIT-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
7890cd8a289SJohannes Doerfert; TUNIT:       L:
7900cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7910cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @use1(i32 2) #[[ATTR7]]
7920cd8a289SJohannes Doerfert; TUNIT-NEXT:    ret void
7930cd8a289SJohannes Doerfert; TUNIT:       S:
7940cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7950cd8a289SJohannes Doerfert; TUNIT-NEXT:    call void @sync()
7960cd8a289SJohannes Doerfert; TUNIT-NEXT:    ret void
7970cd8a289SJohannes Doerfert;
7980cd8a289SJohannes Doerfert; CGSCC-LABEL: define {{[^@]+}}@kernel_unknown_and_not_aligned1
7990cd8a289SJohannes Doerfert; CGSCC-SAME: (i1 [[C:%.*]]) #[[ATTR1]] {
8000cd8a289SJohannes Doerfert; CGSCC-NEXT:    br i1 [[C]], label [[S:%.*]], label [[L:%.*]]
8010cd8a289SJohannes Doerfert; CGSCC:       L:
8020cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
8030cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @use1(i32 2) #[[ATTR6]]
8040cd8a289SJohannes Doerfert; CGSCC-NEXT:    ret void
8050cd8a289SJohannes Doerfert; CGSCC:       S:
8060cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
8070cd8a289SJohannes Doerfert; CGSCC-NEXT:    call void @sync()
8080cd8a289SJohannes Doerfert; CGSCC-NEXT:    ret void
8090cd8a289SJohannes Doerfert;
8100cd8a289SJohannes Doerfert  br i1 %c, label %S, label %L
8110cd8a289SJohannes DoerfertL:
8120cd8a289SJohannes Doerfert  call void @sync();
8130cd8a289SJohannes Doerfert  %v = load i32, ptr addrspace(3) @UANA1
8140cd8a289SJohannes Doerfert  call void @use1(i32 %v)
8150cd8a289SJohannes Doerfert  ret void
8160cd8a289SJohannes DoerfertS:
8170cd8a289SJohannes Doerfert  call void @sync();
8180cd8a289SJohannes Doerfert  store i32 2, ptr addrspace(3) @UANA1
8190cd8a289SJohannes Doerfert  call void @sync();
8200cd8a289SJohannes Doerfert  ret void
8210cd8a289SJohannes Doerfert}
8220cd8a289SJohannes Doerfert
823578d5073SJohannes Doerfertdeclare void @sync()
8245238df7eSJohannes Doerfertdeclare void @barrier() norecurse nounwind nocallback "llvm.assume"="ompx_aligned_barrier"
8254e0f464cSJohannes Doerfertdeclare void @use1(i32) nosync norecurse nounwind nocallback
826b8cbc5c0SJohannes Doerfertdeclare i32 @__kmpc_target_init(ptr, ptr) nocallback
82710068cd6SShilei Tiandeclare void @__kmpc_target_deinit() nocallback
8287bc88cbeSJohannes Doerfertdeclare void @llvm.assume(i1)
8294e0f464cSJohannes Doerfert
8304e0f464cSJohannes Doerfert!llvm.module.flags = !{!0, !1}
8314e0f464cSJohannes Doerfert
8324e0f464cSJohannes Doerfert!0 = !{i32 7, !"openmp", i32 50}
8334e0f464cSJohannes Doerfert!1 = !{i32 7, !"openmp-device", i32 50}
8344e0f464cSJohannes Doerfert
8354e0f464cSJohannes Doerfert;.
83677dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR0]] = { norecurse "kernel" }
83777dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR1]] = { "kernel" }
83877dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
83977dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
84077dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR4:[0-9]+]] = { nocallback }
841fa367d15SJohannes Doerfert; TUNIT: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
84277dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR6]] = { nounwind "llvm.assume"="ompx_aligned_barrier" }
84377dbd1d7SJohannes Doerfert; TUNIT: attributes #[[ATTR7]] = { nounwind }
84477dbd1d7SJohannes Doerfert;.
84577dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR0]] = { norecurse "kernel" }
84677dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR1]] = { "kernel" }
84777dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR2:[0-9]+]] = { nocallback norecurse nounwind "llvm.assume"="ompx_aligned_barrier" }
84877dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR3:[0-9]+]] = { nocallback norecurse nosync nounwind }
84977dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR4:[0-9]+]] = { nocallback }
850fa367d15SJohannes Doerfert; CGSCC: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
85177dbd1d7SJohannes Doerfert; CGSCC: attributes #[[ATTR6]] = { nounwind }
8524e0f464cSJohannes Doerfert;.
853cd3a4c31SJohannes Doerfert; TUNIT: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
854cd3a4c31SJohannes Doerfert; TUNIT: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
855cd3a4c31SJohannes Doerfert;.
856cd3a4c31SJohannes Doerfert; CGSCC: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
857cd3a4c31SJohannes Doerfert; CGSCC: [[META1:![0-9]+]] = !{i32 7, !"openmp-device", i32 50}
8584e0f464cSJohannes Doerfert;.
859