Skip to content

Commit 98194fd

Browse files
committed
[InstCombine][NFC] Precommit a PtrReplacer test
1 parent f972985 commit 98194fd

File tree

1 file changed

+47
-0
lines changed

1 file changed

+47
-0
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=instcombine -S < %s | FileCheck %s
3+
4+
%struct.type = type { [256 x <2 x i64>] }
5+
@g1 = external hidden addrspace(3) global %struct.type, align 16
6+
7+
define <2 x i64> @func(ptr addrspace(4) byref(%struct.type) align 16 %0, i1 %cmp.0) {
8+
; CHECK-LABEL: define <2 x i64> @func(
9+
; CHECK-SAME: ptr addrspace(4) byref([[STRUCT_TYPE:%.*]]) align 16 [[TMP0:%.*]], i1 [[CMP_0:%.*]]) {
10+
; CHECK-NEXT: [[ENTRY:.*:]]
11+
; CHECK-NEXT: [[COERCE:%.*]] = alloca [[STRUCT_TYPE]], align 16, addrspace(5)
12+
; CHECK-NEXT: call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noundef align 16 dereferenceable(4096) [[COERCE]], ptr addrspace(4) noundef align 16 dereferenceable(4096) [[TMP0]], i64 4096, i1 false)
13+
; CHECK-NEXT: br i1 [[CMP_0]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
14+
; CHECK: [[IF_THEN]]:
15+
; CHECK-NEXT: [[VAL_THEN:%.*]] = addrspacecast ptr addrspace(5) [[COERCE]] to ptr
16+
; CHECK-NEXT: br label %[[SINK:.*]]
17+
; CHECK: [[IF_ELSE]]:
18+
; CHECK-NEXT: [[PTR_ELSE:%.*]] = load ptr, ptr addrspace(3) getelementptr inbounds nuw (i8, ptr addrspace(3) @g1, i32 32), align 16
19+
; CHECK-NEXT: br label %[[SINK]]
20+
; CHECK: [[SINK]]:
21+
; CHECK-NEXT: [[PTR_SINK:%.*]] = phi ptr [ [[PTR_ELSE]], %[[IF_ELSE]] ], [ [[VAL_THEN]], %[[IF_THEN]] ]
22+
; CHECK-NEXT: [[VAL_SINK:%.*]] = load <2 x i64>, ptr [[PTR_SINK]], align 16
23+
; CHECK-NEXT: ret <2 x i64> [[VAL_SINK]]
24+
;
25+
entry:
26+
%coerce = alloca %struct.type, align 16, addrspace(5)
27+
call void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) align 16 %coerce, ptr addrspace(4) align 16 %0, i64 4096, i1 false)
28+
br i1 %cmp.0, label %if.then, label %if.else
29+
30+
if.then: ; preds = %entry
31+
%ptr.then = getelementptr inbounds i8, ptr addrspace(5) %coerce, i64 0
32+
%val.then = addrspacecast ptr addrspace(5) %ptr.then to ptr
33+
br label %sink
34+
35+
if.else: ; preds = %entry
36+
%ptr.else = load ptr, ptr addrspace(3) getelementptr inbounds nuw (i8, ptr addrspace(3) @g1, i32 32), align 16
37+
%val.else = getelementptr inbounds nuw i8, ptr %ptr.else, i64 0
38+
br label %sink
39+
40+
sink:
41+
%ptr.sink = phi ptr [ %val.else, %if.else ], [ %val.then, %if.then ]
42+
%val.sink = load <2 x i64>, ptr %ptr.sink, align 16
43+
ret <2 x i64> %val.sink
44+
}
45+
46+
; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
47+
declare void @llvm.memcpy.p5.p4.i64(ptr addrspace(5) noalias writeonly captures(none), ptr addrspace(4) noalias readonly captures(none), i64, i1 immarg) #0

0 commit comments

Comments
 (0)