14
14
target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
15
15
target triple = "aarch64--linux-android9001"
16
16
17
- define i32 @vmax_u8x8 (<8 x i8 > %a ) nounwind ssp # 0 {
17
+ define i32 @vmax_u8x8 (<8 x i8 > %a ) nounwind ssp {
18
18
; CHECK-LABEL: define i32 @vmax_u8x8(
19
19
; CHECK-SAME: <8 x i8> [[A:%.*]]) #[[ATTR0:[0-9]+]] {
20
- ; CHECK-NEXT: [[ENTRY:.*:]]
21
- ; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i8>, ptr @__msan_param_tls, align 8
20
+ ; CHECK-NEXT: [[ENTRY:.*]]:
22
21
; CHECK-NEXT: call void @llvm.donothing()
23
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i8> [[TMP3]] to i64
24
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP4]], 0
25
- ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB2:.*]], label %[[BB3:.*]], !prof [[PROF1:![0-9]+]]
26
- ; CHECK: [[BB2]]:
27
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4:[0-9]+]]
28
- ; CHECK-NEXT: unreachable
29
- ; CHECK: [[BB3]]:
30
22
; CHECK-NEXT: [[VMAXV_I:%.*]] = tail call i32 @llvm.aarch64.neon.umaxv.i32.v8i8(<8 x i8> [[A]]) #[[ATTR3:[0-9]+]]
31
23
; CHECK-NEXT: [[TMP:%.*]] = trunc i32 [[VMAXV_I]] to i8
32
24
; CHECK-NEXT: [[TMP0:%.*]] = xor i8 [[TMP]], 0
33
25
; CHECK-NEXT: [[TMP1:%.*]] = and i8 -1, [[TMP0]]
34
26
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[TMP1]], 0
35
27
; CHECK-NEXT: [[_MSPROP_ICMP:%.*]] = and i1 false, [[TMP2]]
36
28
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i8 [[TMP]], 0
37
- ; CHECK-NEXT: br i1 [[_MSPROP_ICMP]], label %[[BB7:.*]], label %[[BB8:.*]], !prof [[PROF1]]
38
- ; CHECK: [[BB7]]:
39
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
40
- ; CHECK-NEXT: unreachable
41
- ; CHECK: [[BB8]]:
42
29
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[RETURN:.*]], label %[[IF_THEN:.*]]
43
30
; CHECK: [[IF_THEN]]:
44
31
; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
45
32
; CHECK-NEXT: [[CALL1:%.*]] = tail call i32 @bar() #[[ATTR3]]
46
33
; CHECK-NEXT: [[_MSRET:%.*]] = load i32, ptr @__msan_retval_tls, align 8
47
34
; CHECK-NEXT: br label %[[RETURN]]
48
35
; CHECK: [[RETURN]]:
49
- ; CHECK-NEXT: [[_MSPHI_S:%.*]] = phi i32 [ [[_MSRET]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
50
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
51
- ; CHECK-NEXT: store i32 [[_MSPHI_S]], ptr @__msan_retval_tls, align 8
36
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[ENTRY]] ]
37
+ ; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
52
38
; CHECK-NEXT: ret i32 [[RETVAL_0]]
53
39
;
54
40
entry:
@@ -68,41 +54,27 @@ return:
68
54
69
55
declare i32 @bar (...)
70
56
71
- define i32 @vmax_u4x16 (<4 x i16 > %a ) nounwind ssp # 0 {
57
+ define i32 @vmax_u4x16 (<4 x i16 > %a ) nounwind ssp {
72
58
; CHECK-LABEL: define i32 @vmax_u4x16(
73
59
; CHECK-SAME: <4 x i16> [[A:%.*]]) #[[ATTR0]] {
74
- ; CHECK-NEXT: [[ENTRY:.*:]]
75
- ; CHECK-NEXT: [[TMP3:%.*]] = load <4 x i16>, ptr @__msan_param_tls, align 8
60
+ ; CHECK-NEXT: [[ENTRY:.*]]:
76
61
; CHECK-NEXT: call void @llvm.donothing()
77
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <4 x i16> [[TMP3]] to i64
78
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP4]], 0
79
- ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB2:.*]], label %[[BB3:.*]], !prof [[PROF1]]
80
- ; CHECK: [[BB2]]:
81
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
82
- ; CHECK-NEXT: unreachable
83
- ; CHECK: [[BB3]]:
84
62
; CHECK-NEXT: [[VMAXV_I:%.*]] = tail call i32 @llvm.aarch64.neon.umaxv.i32.v4i16(<4 x i16> [[A]]) #[[ATTR3]]
85
63
; CHECK-NEXT: [[TMP:%.*]] = trunc i32 [[VMAXV_I]] to i16
86
64
; CHECK-NEXT: [[TMP0:%.*]] = xor i16 [[TMP]], 0
87
65
; CHECK-NEXT: [[TMP1:%.*]] = and i16 -1, [[TMP0]]
88
66
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i16 [[TMP1]], 0
89
67
; CHECK-NEXT: [[_MSPROP_ICMP:%.*]] = and i1 false, [[TMP2]]
90
68
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i16 [[TMP]], 0
91
- ; CHECK-NEXT: br i1 [[_MSPROP_ICMP]], label %[[BB7:.*]], label %[[BB8:.*]], !prof [[PROF1]]
92
- ; CHECK: [[BB7]]:
93
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
94
- ; CHECK-NEXT: unreachable
95
- ; CHECK: [[BB8]]:
96
69
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[RETURN:.*]], label %[[IF_THEN:.*]]
97
70
; CHECK: [[IF_THEN]]:
98
71
; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
99
72
; CHECK-NEXT: [[CALL1:%.*]] = tail call i32 @bar() #[[ATTR3]]
100
73
; CHECK-NEXT: [[_MSRET:%.*]] = load i32, ptr @__msan_retval_tls, align 8
101
74
; CHECK-NEXT: br label %[[RETURN]]
102
75
; CHECK: [[RETURN]]:
103
- ; CHECK-NEXT: [[_MSPHI_S:%.*]] = phi i32 [ [[_MSRET]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
104
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
105
- ; CHECK-NEXT: store i32 [[_MSPHI_S]], ptr @__msan_retval_tls, align 8
76
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[ENTRY]] ]
77
+ ; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
106
78
; CHECK-NEXT: ret i32 [[RETVAL_0]]
107
79
;
108
80
entry:
@@ -120,41 +92,27 @@ return:
120
92
ret i32 %retval.0
121
93
}
122
94
123
- define i32 @vmax_u8x16 (<8 x i16 > %a ) nounwind ssp # 0 {
95
+ define i32 @vmax_u8x16 (<8 x i16 > %a ) nounwind ssp {
124
96
; CHECK-LABEL: define i32 @vmax_u8x16(
125
97
; CHECK-SAME: <8 x i16> [[A:%.*]]) #[[ATTR0]] {
126
- ; CHECK-NEXT: [[ENTRY:.*:]]
127
- ; CHECK-NEXT: [[TMP3:%.*]] = load <8 x i16>, ptr @__msan_param_tls, align 8
98
+ ; CHECK-NEXT: [[ENTRY:.*]]:
128
99
; CHECK-NEXT: call void @llvm.donothing()
129
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <8 x i16> [[TMP3]] to i128
130
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP4]], 0
131
- ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB2:.*]], label %[[BB3:.*]], !prof [[PROF1]]
132
- ; CHECK: [[BB2]]:
133
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
134
- ; CHECK-NEXT: unreachable
135
- ; CHECK: [[BB3]]:
136
100
; CHECK-NEXT: [[VMAXV_I:%.*]] = tail call i32 @llvm.aarch64.neon.umaxv.i32.v8i16(<8 x i16> [[A]]) #[[ATTR3]]
137
101
; CHECK-NEXT: [[TMP:%.*]] = trunc i32 [[VMAXV_I]] to i16
138
102
; CHECK-NEXT: [[TMP0:%.*]] = xor i16 [[TMP]], 0
139
103
; CHECK-NEXT: [[TMP1:%.*]] = and i16 -1, [[TMP0]]
140
104
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i16 [[TMP1]], 0
141
105
; CHECK-NEXT: [[_MSPROP_ICMP:%.*]] = and i1 false, [[TMP2]]
142
106
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i16 [[TMP]], 0
143
- ; CHECK-NEXT: br i1 [[_MSPROP_ICMP]], label %[[BB7:.*]], label %[[BB8:.*]], !prof [[PROF1]]
144
- ; CHECK: [[BB7]]:
145
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
146
- ; CHECK-NEXT: unreachable
147
- ; CHECK: [[BB8]]:
148
107
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[RETURN:.*]], label %[[IF_THEN:.*]]
149
108
; CHECK: [[IF_THEN]]:
150
109
; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
151
110
; CHECK-NEXT: [[CALL1:%.*]] = tail call i32 @bar() #[[ATTR3]]
152
111
; CHECK-NEXT: [[_MSRET:%.*]] = load i32, ptr @__msan_retval_tls, align 8
153
112
; CHECK-NEXT: br label %[[RETURN]]
154
113
; CHECK: [[RETURN]]:
155
- ; CHECK-NEXT: [[_MSPHI_S:%.*]] = phi i32 [ [[_MSRET]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
156
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
157
- ; CHECK-NEXT: store i32 [[_MSPHI_S]], ptr @__msan_retval_tls, align 8
114
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[ENTRY]] ]
115
+ ; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
158
116
; CHECK-NEXT: ret i32 [[RETVAL_0]]
159
117
;
160
118
entry:
@@ -172,41 +130,27 @@ return:
172
130
ret i32 %retval.0
173
131
}
174
132
175
- define i32 @vmax_u16x8 (<16 x i8 > %a ) nounwind ssp # 0 {
133
+ define i32 @vmax_u16x8 (<16 x i8 > %a ) nounwind ssp {
176
134
; CHECK-LABEL: define i32 @vmax_u16x8(
177
135
; CHECK-SAME: <16 x i8> [[A:%.*]]) #[[ATTR0]] {
178
- ; CHECK-NEXT: [[ENTRY:.*:]]
179
- ; CHECK-NEXT: [[TMP3:%.*]] = load <16 x i8>, ptr @__msan_param_tls, align 8
136
+ ; CHECK-NEXT: [[ENTRY:.*]]:
180
137
; CHECK-NEXT: call void @llvm.donothing()
181
- ; CHECK-NEXT: [[TMP4:%.*]] = bitcast <16 x i8> [[TMP3]] to i128
182
- ; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i128 [[TMP4]], 0
183
- ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB2:.*]], label %[[BB3:.*]], !prof [[PROF1]]
184
- ; CHECK: [[BB2]]:
185
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
186
- ; CHECK-NEXT: unreachable
187
- ; CHECK: [[BB3]]:
188
138
; CHECK-NEXT: [[VMAXV_I:%.*]] = tail call i32 @llvm.aarch64.neon.umaxv.i32.v16i8(<16 x i8> [[A]]) #[[ATTR3]]
189
139
; CHECK-NEXT: [[TMP:%.*]] = trunc i32 [[VMAXV_I]] to i8
190
140
; CHECK-NEXT: [[TMP0:%.*]] = xor i8 [[TMP]], 0
191
141
; CHECK-NEXT: [[TMP1:%.*]] = and i8 -1, [[TMP0]]
192
142
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8 [[TMP1]], 0
193
143
; CHECK-NEXT: [[_MSPROP_ICMP:%.*]] = and i1 false, [[TMP2]]
194
144
; CHECK-NEXT: [[TOBOOL:%.*]] = icmp eq i8 [[TMP]], 0
195
- ; CHECK-NEXT: br i1 [[_MSPROP_ICMP]], label %[[BB7:.*]], label %[[BB8:.*]], !prof [[PROF1]]
196
- ; CHECK: [[BB7]]:
197
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
198
- ; CHECK-NEXT: unreachable
199
- ; CHECK: [[BB8]]:
200
145
; CHECK-NEXT: br i1 [[TOBOOL]], label %[[RETURN:.*]], label %[[IF_THEN:.*]]
201
146
; CHECK: [[IF_THEN]]:
202
147
; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
203
148
; CHECK-NEXT: [[CALL1:%.*]] = tail call i32 @bar() #[[ATTR3]]
204
149
; CHECK-NEXT: [[_MSRET:%.*]] = load i32, ptr @__msan_retval_tls, align 8
205
150
; CHECK-NEXT: br label %[[RETURN]]
206
151
; CHECK: [[RETURN]]:
207
- ; CHECK-NEXT: [[_MSPHI_S:%.*]] = phi i32 [ [[_MSRET]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
208
- ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[BB8]] ]
209
- ; CHECK-NEXT: store i32 [[_MSPHI_S]], ptr @__msan_retval_tls, align 8
152
+ ; CHECK-NEXT: [[RETVAL_0:%.*]] = phi i32 [ [[CALL1]], %[[IF_THEN]] ], [ 0, %[[ENTRY]] ]
153
+ ; CHECK-NEXT: store i32 0, ptr @__msan_retval_tls, align 8
210
154
; CHECK-NEXT: ret i32 [[RETVAL_0]]
211
155
;
212
156
entry:
@@ -233,9 +177,9 @@ define <8 x i8> @test_vmaxv_u8_used_by_laneop(<8 x i8> %a1, <8 x i8> %a2) #0 {
233
177
; CHECK-NEXT: call void @llvm.donothing()
234
178
; CHECK-NEXT: [[TMP2:%.*]] = bitcast <8 x i8> [[TMP0]] to i64
235
179
; CHECK-NEXT: [[_MSCMP:%.*]] = icmp ne i64 [[TMP2]], 0
236
- ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB3:.*]], label %[[BB4:.*]], !prof [[PROF1]]
180
+ ; CHECK-NEXT: br i1 [[_MSCMP]], label %[[BB3:.*]], label %[[BB4:.*]], !prof [[PROF1:![0-9]+ ]]
237
181
; CHECK: [[BB3]]:
238
- ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4]]
182
+ ; CHECK-NEXT: call void @__msan_warning_noreturn() #[[ATTR4:[0-9]+ ]]
239
183
; CHECK-NEXT: unreachable
240
184
; CHECK: [[BB4]]:
241
185
; CHECK-NEXT: [[TMP5:%.*]] = tail call i32 @llvm.aarch64.neon.umaxv.i32.v8i8(<8 x i8> [[A2]])
0 commit comments