@@ -30,10 +30,8 @@ define <2 x i32> @fabs_as_int_v2f32_noimplicitfloat(<2 x float> %x) noimplicitfl
3030define float @fabs_as_int_f32_castback (float %val ) {
3131; CHECK-LABEL: define float @fabs_as_int_f32_castback
3232; CHECK-SAME: (float [[VAL:%.*]]) {
33- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
34- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
35- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
36- ; CHECK-NEXT: ret float [[FABS]]
33+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
34+ ; CHECK-NEXT: ret float [[TMP1]]
3735;
3836 %bitcast = bitcast float %val to i32
3937 %and = and i32 %bitcast , 2147483647
@@ -44,10 +42,8 @@ define float @fabs_as_int_f32_castback(float %val) {
4442define float @not_fabs_as_int_f32_castback_wrongconst (float %val ) {
4543; CHECK-LABEL: define float @not_fabs_as_int_f32_castback_wrongconst
4644; CHECK-SAME: (float [[VAL:%.*]]) {
47- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
48- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
49- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
50- ; CHECK-NEXT: ret float [[FABS]]
45+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
46+ ; CHECK-NEXT: ret float [[TMP1]]
5147;
5248 %bitcast = bitcast float %val to i32
5349 %and = and i32 %bitcast , 2147483647
@@ -58,11 +54,9 @@ define float @not_fabs_as_int_f32_castback_wrongconst(float %val) {
5854define float @fabs_as_int_f32_castback_multi_use (float %val , ptr %ptr ) {
5955; CHECK-LABEL: define float @fabs_as_int_f32_castback_multi_use
6056; CHECK-SAME: (float [[VAL:%.*]], ptr [[PTR:%.*]]) {
61- ; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32
62- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BITCAST]], 2147483647
63- ; CHECK-NEXT: store i32 [[AND]], ptr [[PTR]], align 4
64- ; CHECK-NEXT: [[FABS:%.*]] = bitcast i32 [[AND]] to float
65- ; CHECK-NEXT: ret float [[FABS]]
57+ ; CHECK-NEXT: [[TMP1:%.*]] = call float @llvm.fabs.f32(float [[VAL]])
58+ ; CHECK-NEXT: store float [[TMP1]], ptr [[PTR]], align 4
59+ ; CHECK-NEXT: ret float [[TMP1]]
6660;
6761 %bitcast = bitcast float %val to i32
6862 %and = and i32 %bitcast , 2147483647
@@ -74,8 +68,8 @@ define float @fabs_as_int_f32_castback_multi_use(float %val, ptr %ptr) {
7468define i64 @fabs_as_int_f64 (double %x ) {
7569; CHECK-LABEL: define i64 @fabs_as_int_f64
7670; CHECK-SAME: (double [[X:%.*]]) {
77- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
78- ; CHECK-NEXT: [[AND:%.*]] = and i64 [[BC]], 9223372036854775807
71+ ; CHECK-NEXT: [[TMP1 :%.*]] = call double @llvm.fabs.f64(double [[X]])
72+ ; CHECK-NEXT: [[AND:%.*]] = bitcast double [[TMP1]] to i64
7973; CHECK-NEXT: ret i64 [[AND]]
8074;
8175 %bc = bitcast double %x to i64
@@ -86,8 +80,8 @@ define i64 @fabs_as_int_f64(double %x) {
8680define <2 x i64 > @fabs_as_int_v2f64 (<2 x double > %x ) {
8781; CHECK-LABEL: define <2 x i64> @fabs_as_int_v2f64
8882; CHECK-SAME: (<2 x double> [[X:%.*]]) {
89- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x double> [[X]] to <2 x i64>
90- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i64 > [[BC]], <i64 9223372036854775807, i64 9223372036854775807 >
83+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x double> @llvm.fabs.v2f64( <2 x double> [[X]])
84+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x double > [[TMP1]] to <2 x i64>
9185; CHECK-NEXT: ret <2 x i64> [[AND]]
9286;
9387 %bc = bitcast <2 x double > %x to <2 x i64 >
@@ -98,8 +92,8 @@ define <2 x i64> @fabs_as_int_v2f64(<2 x double> %x) {
9892define i64 @fabs_as_int_f64_swap (double %x ) {
9993; CHECK-LABEL: define i64 @fabs_as_int_f64_swap
10094; CHECK-SAME: (double [[X:%.*]]) {
101- ; CHECK-NEXT: [[BC :%.*]] = bitcast double [[X]] to i64
102- ; CHECK-NEXT: [[AND:%.*]] = and i64 [[BC]], 9223372036854775807
95+ ; CHECK-NEXT: [[TMP1 :%.*]] = call double @llvm.fabs.f64(double [[X]])
96+ ; CHECK-NEXT: [[AND:%.*]] = bitcast double [[TMP1]] to i64
10397; CHECK-NEXT: ret i64 [[AND]]
10498;
10599 %bc = bitcast double %x to i64
@@ -110,8 +104,8 @@ define i64 @fabs_as_int_f64_swap(double %x) {
110104define i32 @fabs_as_int_f32 (float %x ) {
111105; CHECK-LABEL: define i32 @fabs_as_int_f32
112106; CHECK-SAME: (float [[X:%.*]]) {
113- ; CHECK-NEXT: [[BC :%.*]] = bitcast float [[X]] to i32
114- ; CHECK-NEXT: [[AND:%.*]] = and i32 [[BC]], 2147483647
107+ ; CHECK-NEXT: [[TMP1 :%.*]] = call float @llvm.fabs.f32(float [[X]])
108+ ; CHECK-NEXT: [[AND:%.*]] = bitcast float [[TMP1]] to i32
115109; CHECK-NEXT: ret i32 [[AND]]
116110;
117111 %bc = bitcast float %x to i32
@@ -122,8 +116,8 @@ define i32 @fabs_as_int_f32(float %x) {
122116define <2 x i32 > @fabs_as_int_v2f32 (<2 x float > %x ) {
123117; CHECK-LABEL: define <2 x i32> @fabs_as_int_v2f32
124118; CHECK-SAME: (<2 x float> [[X:%.*]]) {
125- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x float> [[X]] to <2 x i32>
126- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i32 > [[BC]], <i32 2147483647, i32 2147483647 >
119+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x float> @llvm.fabs.v2f32( <2 x float> [[X]])
120+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x float > [[TMP1]] to <2 x i32>
127121; CHECK-NEXT: ret <2 x i32> [[AND]]
128122;
129123 %bc = bitcast <2 x float > %x to <2 x i32 >
@@ -146,8 +140,8 @@ define <2 x i32> @not_fabs_as_int_v2f32_nonsplat(<2 x float> %x) {
146140define <3 x i32 > @fabs_as_int_v3f32_undef (<3 x float > %x ) {
147141; CHECK-LABEL: define <3 x i32> @fabs_as_int_v3f32_undef
148142; CHECK-SAME: (<3 x float> [[X:%.*]]) {
149- ; CHECK-NEXT: [[BC :%.*]] = bitcast <3 x float> [[X]] to <3 x i32>
150- ; CHECK-NEXT: [[AND:%.*]] = and <3 x i32 > [[BC]], <i32 2147483647, i32 undef, i32 2147483647 >
143+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <3 x float> @llvm.fabs.v3f32( <3 x float> [[X]])
144+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <3 x float > [[TMP1]] to <3 x i32>
151145; CHECK-NEXT: ret <3 x i32> [[AND]]
152146;
153147 %bc = bitcast <3 x float > %x to <3 x i32 >
@@ -199,8 +193,8 @@ define float @not_fabs_as_int_f32_bitcast_from_v2i16(<2 x i16> %val) {
199193define i128 @fabs_as_int_fp128_f64_mask (fp128 %x ) {
200194; CHECK-LABEL: define i128 @fabs_as_int_fp128_f64_mask
201195; CHECK-SAME: (fp128 [[X:%.*]]) {
202- ; CHECK-NEXT: [[BC :%.*]] = bitcast fp128 [[X]] to i128
203- ; CHECK-NEXT: [[AND:%.*]] = and i128 [[BC]], 170141183460469231731687303715884105727
196+ ; CHECK-NEXT: [[TMP1 :%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X]])
197+ ; CHECK-NEXT: [[AND:%.*]] = bitcast fp128 [[TMP1]] to i128
204198; CHECK-NEXT: ret i128 [[AND]]
205199;
206200 %bc = bitcast fp128 %x to i128
@@ -211,8 +205,8 @@ define i128 @fabs_as_int_fp128_f64_mask(fp128 %x) {
211205define i128 @fabs_as_int_fp128_f128_mask (fp128 %x ) {
212206; CHECK-LABEL: define i128 @fabs_as_int_fp128_f128_mask
213207; CHECK-SAME: (fp128 [[X:%.*]]) {
214- ; CHECK-NEXT: [[BC :%.*]] = bitcast fp128 [[X]] to i128
215- ; CHECK-NEXT: [[AND:%.*]] = and i128 [[BC]], 170141183460469231731687303715884105727
208+ ; CHECK-NEXT: [[TMP1 :%.*]] = call fp128 @llvm.fabs.f128(fp128 [[X]])
209+ ; CHECK-NEXT: [[AND:%.*]] = bitcast fp128 [[TMP1]] to i128
216210; CHECK-NEXT: ret i128 [[AND]]
217211;
218212 %bc = bitcast fp128 %x to i128
@@ -223,8 +217,8 @@ define i128 @fabs_as_int_fp128_f128_mask(fp128 %x) {
223217define i16 @fabs_as_int_f16 (half %x ) {
224218; CHECK-LABEL: define i16 @fabs_as_int_f16
225219; CHECK-SAME: (half [[X:%.*]]) {
226- ; CHECK-NEXT: [[BC :%.*]] = bitcast half [[X]] to i16
227- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[BC]], 32767
220+ ; CHECK-NEXT: [[TMP1 :%.*]] = call half @llvm.fabs.f16(half [[X]])
221+ ; CHECK-NEXT: [[AND:%.*]] = bitcast half [[TMP1]] to i16
228222; CHECK-NEXT: ret i16 [[AND]]
229223;
230224 %bc = bitcast half %x to i16
@@ -235,8 +229,8 @@ define i16 @fabs_as_int_f16(half %x) {
235229define <2 x i16 > @fabs_as_int_v2f16 (<2 x half > %x ) {
236230; CHECK-LABEL: define <2 x i16> @fabs_as_int_v2f16
237231; CHECK-SAME: (<2 x half> [[X:%.*]]) {
238- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x half> [[X]] to <2 x i16>
239- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i16 > [[BC]], <i16 32767, i16 32767 >
232+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x half> @llvm.fabs.v2f16( <2 x half> [[X]])
233+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x half > [[TMP1]] to <2 x i16>
240234; CHECK-NEXT: ret <2 x i16> [[AND]]
241235;
242236 %bc = bitcast <2 x half > %x to <2 x i16 >
@@ -247,8 +241,8 @@ define <2 x i16> @fabs_as_int_v2f16(<2 x half> %x) {
247241define i16 @fabs_as_int_bf16 (bfloat %x ) {
248242; CHECK-LABEL: define i16 @fabs_as_int_bf16
249243; CHECK-SAME: (bfloat [[X:%.*]]) {
250- ; CHECK-NEXT: [[BC :%.*]] = bitcast bfloat [[X]] to i16
251- ; CHECK-NEXT: [[AND:%.*]] = and i16 [[BC]], 32767
244+ ; CHECK-NEXT: [[TMP1 :%.*]] = call bfloat @llvm.fabs.bf16(bfloat [[X]])
245+ ; CHECK-NEXT: [[AND:%.*]] = bitcast bfloat [[TMP1]] to i16
252246; CHECK-NEXT: ret i16 [[AND]]
253247;
254248 %bc = bitcast bfloat %x to i16
@@ -259,8 +253,8 @@ define i16 @fabs_as_int_bf16(bfloat %x) {
259253define <2 x i16 > @fabs_as_int_v2bf16 (<2 x bfloat> %x ) {
260254; CHECK-LABEL: define <2 x i16> @fabs_as_int_v2bf16
261255; CHECK-SAME: (<2 x bfloat> [[X:%.*]]) {
262- ; CHECK-NEXT: [[BC :%.*]] = bitcast <2 x bfloat> [[X]] to <2 x i16>
263- ; CHECK-NEXT: [[AND:%.*]] = and <2 x i16 > [[BC]], <i16 32767, i16 32767 >
256+ ; CHECK-NEXT: [[TMP1 :%.*]] = call <2 x bfloat> @llvm.fabs.v2bf16( <2 x bfloat> [[X]])
257+ ; CHECK-NEXT: [[AND:%.*]] = bitcast <2 x bfloat > [[TMP1]] to <2 x i16>
264258; CHECK-NEXT: ret <2 x i16> [[AND]]
265259;
266260 %bc = bitcast <2 x bfloat> %x to <2 x i16 >
0 commit comments