1
+ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
1
2
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -loop-reduce %s | FileCheck %s
2
3
3
4
; Test for assert resulting from inconsistent isLegalAddressingMode
@@ -7,13 +8,36 @@ target datalayout = "e-p:64:64-p1:64:64-p2:32:32-p3:32:32-p4:64:64-p5:32:32-p6:3
7
8
8
9
%0 = type { i32 , double , i32 , float }
9
10
10
- ; CHECK-LABEL: @lsr_crash_preserve_addrspace_unknown_type(
11
- ; CHECK: %scevgep1 = getelementptr i8, ptr addrspace(3) %tmp, i32 8
12
- ; CHECK: load double, ptr addrspace(3) %scevgep1
13
11
14
- ; CHECK: %scevgep = getelementptr i8, ptr addrspace(3) %tmp, i32 16
15
- ; CHECK: %tmp14 = load i32, ptr addrspace(3) %scevgep
16
12
define amdgpu_kernel void @lsr_crash_preserve_addrspace_unknown_type () #0 {
13
+ ; CHECK-LABEL: define amdgpu_kernel void @lsr_crash_preserve_addrspace_unknown_type(
14
+ ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
15
+ ; CHECK-NEXT: [[BB:.*]]:
16
+ ; CHECK-NEXT: br label %[[BB1:.*]]
17
+ ; CHECK: [[BB1]]:
18
+ ; CHECK-NEXT: [[TMP:%.*]] = phi ptr addrspace(3) [ undef, %[[BB]] ], [ [[TMP18:%.*]], %[[BB17:.*]] ]
19
+ ; CHECK-NEXT: [[SCEVGEP1:%.*]] = getelementptr i8, ptr addrspace(3) [[TMP]], i32 8
20
+ ; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr addrspace(3) [[SCEVGEP1]], align 8
21
+ ; CHECK-NEXT: br label %[[BB4:.*]]
22
+ ; CHECK: [[BB4]]:
23
+ ; CHECK-NEXT: br i1 false, label %[[BB8:.*]], label %[[BB5:.*]]
24
+ ; CHECK: [[BB5]]:
25
+ ; CHECK-NEXT: unreachable
26
+ ; CHECK: [[BB8]]:
27
+ ; CHECK-NEXT: [[TMP10:%.*]] = load i32, ptr addrspace(3) [[TMP]], align 4
28
+ ; CHECK-NEXT: [[TMP11:%.*]] = icmp eq i32 0, [[TMP10]]
29
+ ; CHECK-NEXT: br i1 [[TMP11]], label %[[BB12:.*]], label %[[BB17]]
30
+ ; CHECK: [[BB12]]:
31
+ ; CHECK-NEXT: [[SCEVGEP:%.*]] = getelementptr i8, ptr addrspace(3) [[TMP]], i32 16
32
+ ; CHECK-NEXT: [[TMP14:%.*]] = load i32, ptr addrspace(3) [[SCEVGEP]], align 4
33
+ ; CHECK-NEXT: [[TMP15:%.*]] = icmp eq i32 0, [[TMP14]]
34
+ ; CHECK-NEXT: br i1 [[TMP15]], label %[[BB16:.*]], label %[[BB17]]
35
+ ; CHECK: [[BB16]]:
36
+ ; CHECK-NEXT: unreachable
37
+ ; CHECK: [[BB17]]:
38
+ ; CHECK-NEXT: [[TMP18]] = getelementptr inbounds [[TMP0:%.*]], ptr addrspace(3) [[TMP]], i64 2
39
+ ; CHECK-NEXT: br label %[[BB1]]
40
+ ;
17
41
bb:
18
42
br label %bb1
19
43
@@ -48,15 +72,33 @@ bb17: ; preds = %bb12, %bb8
48
72
br label %bb1
49
73
}
50
74
51
- ; CHECK-LABEL: @lsr_crash_preserve_addrspace_unknown_type2(
52
- ; CHECK: %idx = getelementptr inbounds i8, ptr addrspace(5) %array, i32 %j
53
- ; CHECK: %idx1 = getelementptr inbounds i8, ptr addrspace(3) %array2, i32 %j
54
- ; CHECK: %t = getelementptr inbounds i8, ptr addrspace(5) %array, i32 %j
55
- ; CHECK: %n8 = load i8, ptr addrspace(5) %t, align 4
56
- ; CHECK: call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) %idx, ptr addrspace(3) %idx1, i64 42, i1 false)
57
- ; CHECK: call void @llvm.memmove.p5.p3.i64(ptr addrspace(5) %idx, ptr addrspace(3) %idx1, i64 42, i1 false)
58
- ; CHECK: call void @llvm.memset.p5.i64(ptr addrspace(5) %idx, i8 42, i64 42, i1 false)
59
75
define void @lsr_crash_preserve_addrspace_unknown_type2 (ptr addrspace (5 ) %array , ptr addrspace (3 ) %array2 ) {
76
+ ; CHECK-LABEL: define void @lsr_crash_preserve_addrspace_unknown_type2(
77
+ ; CHECK-SAME: ptr addrspace(5) [[ARRAY:%.*]], ptr addrspace(3) [[ARRAY2:%.*]]) {
78
+ ; CHECK-NEXT: [[ENTRY:.*]]:
79
+ ; CHECK-NEXT: br label %[[FOR_BODY:.*]]
80
+ ; CHECK: [[FOR_BODY]]:
81
+ ; CHECK-NEXT: [[J:%.*]] = phi i32 [ [[ADD:%.*]], %[[FOR_INC:.*]] ], [ 0, %[[ENTRY]] ]
82
+ ; CHECK-NEXT: [[IDX:%.*]] = getelementptr inbounds i8, ptr addrspace(5) [[ARRAY]], i32 [[J]]
83
+ ; CHECK-NEXT: [[IDX1:%.*]] = getelementptr inbounds i8, ptr addrspace(3) [[ARRAY2]], i32 [[J]]
84
+ ; CHECK-NEXT: [[T:%.*]] = getelementptr inbounds i8, ptr addrspace(5) [[ARRAY]], i32 [[J]]
85
+ ; CHECK-NEXT: [[N8:%.*]] = load i8, ptr addrspace(5) [[T]], align 4
86
+ ; CHECK-NEXT: [[N7:%.*]] = getelementptr inbounds i8, ptr addrspace(5) [[T]], i32 42
87
+ ; CHECK-NEXT: [[N9:%.*]] = load i8, ptr addrspace(5) [[N7]], align 4
88
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[J]], 42
89
+ ; CHECK-NEXT: br i1 [[CMP]], label %[[IF_THEN17:.*]], label %[[FOR_INC]]
90
+ ; CHECK: [[IF_THEN17]]:
91
+ ; CHECK-NEXT: call void @llvm.memcpy.p5.p3.i64(ptr addrspace(5) [[IDX]], ptr addrspace(3) [[IDX1]], i64 42, i1 false)
92
+ ; CHECK-NEXT: call void @llvm.memmove.p5.p3.i64(ptr addrspace(5) [[IDX]], ptr addrspace(3) [[IDX1]], i64 42, i1 false)
93
+ ; CHECK-NEXT: call void @llvm.memset.p5.i64(ptr addrspace(5) [[IDX]], i8 42, i64 42, i1 false)
94
+ ; CHECK-NEXT: br label %[[FOR_INC]]
95
+ ; CHECK: [[FOR_INC]]:
96
+ ; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i1 [[CMP]], true
97
+ ; CHECK-NEXT: [[ADD]] = add nuw nsw i32 [[J]], 1
98
+ ; CHECK-NEXT: br i1 [[EXITCOND]], label %[[END:.*]], label %[[FOR_BODY]]
99
+ ; CHECK: [[END]]:
100
+ ; CHECK-NEXT: ret void
101
+ ;
60
102
entry:
61
103
br label %for.body
62
104
0 commit comments