@@ -18,17 +18,23 @@ define protected amdgpu_kernel void @constant_load(i64 %i) sanitize_address {
18
18
; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
19
19
; CHECK-NEXT: [[TMP4:%.*]] = load i8, ptr [[TMP3]], align 1
20
20
; CHECK-NEXT: [[TMP5:%.*]] = icmp ne i8 [[TMP4]], 0
21
- ; CHECK-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP12:%.*]], !prof [[PROF2:![0-9]+]]
22
- ; CHECK: 6:
23
- ; CHECK-NEXT: [[TMP7:%.*]] = and i64 [[TMP0]], 7
24
- ; CHECK-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 3
25
- ; CHECK-NEXT: [[TMP9:%.*]] = trunc i64 [[TMP8]] to i8
26
- ; CHECK-NEXT: [[TMP10:%.*]] = icmp sge i8 [[TMP9]], [[TMP4]]
27
- ; CHECK-NEXT: br i1 [[TMP10]], label [[TMP11:%.*]], label [[TMP12]]
28
- ; CHECK: 11:
29
- ; CHECK-NEXT: call void @__asan_report_load4(i64 [[TMP0]]) #[[ATTR3:[0-9]+]]
30
- ; CHECK-NEXT: unreachable
31
- ; CHECK: 12:
21
+ ; CHECK-NEXT: [[TMP6:%.*]] = and i64 [[TMP0]], 7
22
+ ; CHECK-NEXT: [[TMP7:%.*]] = add i64 [[TMP6]], 3
23
+ ; CHECK-NEXT: [[TMP8:%.*]] = trunc i64 [[TMP7]] to i8
24
+ ; CHECK-NEXT: [[TMP9:%.*]] = icmp sge i8 [[TMP8]], [[TMP4]]
25
+ ; CHECK-NEXT: [[TMP10:%.*]] = and i1 [[TMP5]], [[TMP9]]
26
+ ; CHECK-NEXT: [[TMP11:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP10]])
27
+ ; CHECK-NEXT: [[TMP12:%.*]] = icmp ne i64 [[TMP11]], 0
28
+ ; CHECK-NEXT: br i1 [[TMP12]], label [[ASAN_REPORT:%.*]], label [[TMP15:%.*]], !prof [[PROF2:![0-9]+]]
29
+ ; CHECK: asan.report:
30
+ ; CHECK-NEXT: br i1 [[TMP10]], label [[TMP13:%.*]], label [[TMP14:%.*]]
31
+ ; CHECK: 13:
32
+ ; CHECK-NEXT: call void @__asan_report_load4(i64 [[TMP0]]) #[[ATTR5:[0-9]+]]
33
+ ; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
34
+ ; CHECK-NEXT: br label [[TMP14]]
35
+ ; CHECK: 14:
36
+ ; CHECK-NEXT: br label [[TMP15]]
37
+ ; CHECK: 15:
32
38
; CHECK-NEXT: [[Q:%.*]] = load i32, ptr addrspace(4) [[A]], align 4
33
39
; CHECK-NEXT: ret void
34
40
;
@@ -42,19 +48,16 @@ define protected amdgpu_kernel void @constant_load(i64 %i) sanitize_address {
42
48
; RECOV-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
43
49
; RECOV-NEXT: [[TMP4:%.*]] = load i8, ptr [[TMP3]], align 1
44
50
; RECOV-NEXT: [[TMP5:%.*]] = icmp ne i8 [[TMP4]], 0
45
- ; RECOV-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP13:%.*]], !prof [[PROF2:![0-9]+]]
46
- ; RECOV: 6:
47
- ; RECOV-NEXT: [[TMP7:%.*]] = and i64 [[TMP0]], 7
48
- ; RECOV-NEXT: [[TMP8:%.*]] = add i64 [[TMP7]], 3
49
- ; RECOV-NEXT: [[TMP9:%.*]] = trunc i64 [[TMP8]] to i8
50
- ; RECOV-NEXT: [[TMP10:%.*]] = icmp sge i8 [[TMP9]], [[TMP4]]
51
- ; RECOV-NEXT: br i1 [[TMP10]], label [[TMP11:%.*]], label [[TMP12:%.*]]
52
- ; RECOV: 11:
51
+ ; RECOV-NEXT: [[TMP6:%.*]] = and i64 [[TMP0]], 7
52
+ ; RECOV-NEXT: [[TMP7:%.*]] = add i64 [[TMP6]], 3
53
+ ; RECOV-NEXT: [[TMP8:%.*]] = trunc i64 [[TMP7]] to i8
54
+ ; RECOV-NEXT: [[TMP9:%.*]] = icmp sge i8 [[TMP8]], [[TMP4]]
55
+ ; RECOV-NEXT: [[TMP10:%.*]] = and i1 [[TMP5]], [[TMP9]]
56
+ ; RECOV-NEXT: br i1 [[TMP10]], label [[ASAN_REPORT:%.*]], label [[TMP11:%.*]], !prof [[PROF2:![0-9]+]]
57
+ ; RECOV: asan.report:
53
58
; RECOV-NEXT: call void @__asan_report_load4_noabort(i64 [[TMP0]]) #[[ATTR3:[0-9]+]]
54
- ; RECOV-NEXT: br label [[TMP12]]
55
- ; RECOV: 12:
56
- ; RECOV-NEXT: br label [[TMP13]]
57
- ; RECOV: 13:
59
+ ; RECOV-NEXT: br label [[TMP11]]
60
+ ; RECOV: 11:
58
61
; RECOV-NEXT: [[Q:%.*]] = load i32, ptr addrspace(4) [[A]], align 4
59
62
; RECOV-NEXT: ret void
60
63
;
@@ -75,11 +78,18 @@ define protected amdgpu_kernel void @constant_load_8(i64 %i) sanitize_address {
75
78
; CHECK-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
76
79
; CHECK-NEXT: [[TMP4:%.*]] = load i8, ptr [[TMP3]], align 1
77
80
; CHECK-NEXT: [[TMP5:%.*]] = icmp ne i8 [[TMP4]], 0
78
- ; CHECK-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP7:%.*]]
79
- ; CHECK: 6:
80
- ; CHECK-NEXT: call void @__asan_report_load8(i64 [[TMP0]]) #[[ATTR3]]
81
- ; CHECK-NEXT: unreachable
82
- ; CHECK: 7:
81
+ ; CHECK-NEXT: [[TMP6:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP5]])
82
+ ; CHECK-NEXT: [[TMP7:%.*]] = icmp ne i64 [[TMP6]], 0
83
+ ; CHECK-NEXT: br i1 [[TMP7]], label [[ASAN_REPORT:%.*]], label [[TMP10:%.*]], !prof [[PROF2]]
84
+ ; CHECK: asan.report:
85
+ ; CHECK-NEXT: br i1 [[TMP5]], label [[TMP8:%.*]], label [[TMP9:%.*]]
86
+ ; CHECK: 8:
87
+ ; CHECK-NEXT: call void @__asan_report_load8(i64 [[TMP0]]) #[[ATTR5]]
88
+ ; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
89
+ ; CHECK-NEXT: br label [[TMP9]]
90
+ ; CHECK: 9:
91
+ ; CHECK-NEXT: br label [[TMP10]]
92
+ ; CHECK: 10:
83
93
; CHECK-NEXT: [[Q:%.*]] = load i64, ptr addrspace(4) [[A]], align 8
84
94
; CHECK-NEXT: ret void
85
95
;
@@ -93,11 +103,11 @@ define protected amdgpu_kernel void @constant_load_8(i64 %i) sanitize_address {
93
103
; RECOV-NEXT: [[TMP3:%.*]] = inttoptr i64 [[TMP2]] to ptr
94
104
; RECOV-NEXT: [[TMP4:%.*]] = load i8, ptr [[TMP3]], align 1
95
105
; RECOV-NEXT: [[TMP5:%.*]] = icmp ne i8 [[TMP4]], 0
96
- ; RECOV-NEXT: br i1 [[TMP5]], label [[TMP6 :%.*]], label [[TMP7 :%.*]]
97
- ; RECOV: 6 :
106
+ ; RECOV-NEXT: br i1 [[TMP5]], label [[ASAN_REPORT :%.*]], label [[TMP6 :%.*]], !prof [[PROF2 ]]
107
+ ; RECOV: asan.report :
98
108
; RECOV-NEXT: call void @__asan_report_load8_noabort(i64 [[TMP0]]) #[[ATTR3]]
99
- ; RECOV-NEXT: br label [[TMP7 ]]
100
- ; RECOV: 7 :
109
+ ; RECOV-NEXT: br label [[TMP6 ]]
110
+ ; RECOV: 6 :
101
111
; RECOV-NEXT: [[Q:%.*]] = load i64, ptr addrspace(4) [[A]], align 8
102
112
; RECOV-NEXT: ret void
103
113
;
0 commit comments