112660867SMatt Arsenault; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 212660867SMatt Arsenault; RUN: opt -S -passes=instcombine %s | FileCheck %s 312660867SMatt Arsenault 412660867SMatt Arsenaultdefine float @fneg_as_int_f32_castback_noimplicitfloat(float %val) noimplicitfloat { 512660867SMatt Arsenault; CHECK-LABEL: define float @fneg_as_int_f32_castback_noimplicitfloat 612660867SMatt Arsenault; CHECK-SAME: (float [[VAL:%.*]]) #[[ATTR0:[0-9]+]] { 712660867SMatt Arsenault; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32 812660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483648 912660867SMatt Arsenault; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float 1012660867SMatt Arsenault; CHECK-NEXT: ret float [[FNEG]] 1112660867SMatt Arsenault; 1212660867SMatt Arsenault %bitcast = bitcast float %val to i32 1312660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483648 1412660867SMatt Arsenault %fneg = bitcast i32 %xor to float 1512660867SMatt Arsenault ret float %fneg 1612660867SMatt Arsenault} 1712660867SMatt Arsenault 1812660867SMatt Arsenaultdefine <2 x i32> @fneg_as_int_v2f32_noimplicitfloat(<2 x float> %x) noimplicitfloat { 1912660867SMatt Arsenault; CHECK-LABEL: define <2 x i32> @fneg_as_int_v2f32_noimplicitfloat 2012660867SMatt Arsenault; CHECK-SAME: (<2 x float> [[X:%.*]]) #[[ATTR0]] { 2112660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = bitcast <2 x float> [[X]] to <2 x i32> 22*38fffa63SPaul Walker; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32> [[BC]], splat (i32 -2147483648) 2312660867SMatt Arsenault; CHECK-NEXT: ret <2 x i32> [[XOR]] 2412660867SMatt Arsenault; 2512660867SMatt Arsenault %bc = bitcast <2 x float> %x to <2 x i32> 2612660867SMatt Arsenault %xor = xor <2 x i32> %bc, <i32 -2147483648, i32 -2147483648> 2712660867SMatt Arsenault ret <2 x i32> %xor 2812660867SMatt Arsenault} 2912660867SMatt Arsenault 3012660867SMatt Arsenaultdefine float @fneg_as_int_f32_castback(float %val) { 3112660867SMatt Arsenault; CHECK-LABEL: define float @fneg_as_int_f32_castback 3212660867SMatt Arsenault; CHECK-SAME: (float [[VAL:%.*]]) { 3350a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg float [[VAL]] 3450a9b3d8SMatt Arsenault; CHECK-NEXT: ret float [[TMP1]] 3512660867SMatt Arsenault; 3612660867SMatt Arsenault %bitcast = bitcast float %val to i32 3712660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483648 3812660867SMatt Arsenault %fneg = bitcast i32 %xor to float 3912660867SMatt Arsenault ret float %fneg 4012660867SMatt Arsenault} 4112660867SMatt Arsenault 4212660867SMatt Arsenaultdefine float @not_fneg_as_int_f32_castback_wrongconst(float %val) { 4312660867SMatt Arsenault; CHECK-LABEL: define float @not_fneg_as_int_f32_castback_wrongconst 4412660867SMatt Arsenault; CHECK-SAME: (float [[VAL:%.*]]) { 4512660867SMatt Arsenault; CHECK-NEXT: [[BITCAST:%.*]] = bitcast float [[VAL]] to i32 4612660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483647 4712660867SMatt Arsenault; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float 4812660867SMatt Arsenault; CHECK-NEXT: ret float [[FNEG]] 4912660867SMatt Arsenault; 5012660867SMatt Arsenault %bitcast = bitcast float %val to i32 5112660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483647 5212660867SMatt Arsenault %fneg = bitcast i32 %xor to float 5312660867SMatt Arsenault ret float %fneg 5412660867SMatt Arsenault} 5512660867SMatt Arsenault 5612660867SMatt Arsenaultdefine float @fneg_as_int_f32_castback_multi_use(float %val, ptr %ptr) { 5712660867SMatt Arsenault; CHECK-LABEL: define float @fneg_as_int_f32_castback_multi_use 5812660867SMatt Arsenault; CHECK-SAME: (float [[VAL:%.*]], ptr [[PTR:%.*]]) { 5950a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg float [[VAL]] 6050a9b3d8SMatt Arsenault; CHECK-NEXT: store float [[TMP1]], ptr [[PTR]], align 4 6150a9b3d8SMatt Arsenault; CHECK-NEXT: ret float [[TMP1]] 6212660867SMatt Arsenault; 6312660867SMatt Arsenault %bitcast = bitcast float %val to i32 6412660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483648 6512660867SMatt Arsenault store i32 %xor, ptr %ptr 6612660867SMatt Arsenault %fneg = bitcast i32 %xor to float 6712660867SMatt Arsenault ret float %fneg 6812660867SMatt Arsenault} 6912660867SMatt Arsenault 7012660867SMatt Arsenaultdefine i64 @fneg_as_int_f64(double %x) { 7112660867SMatt Arsenault; CHECK-LABEL: define i64 @fneg_as_int_f64 7212660867SMatt Arsenault; CHECK-SAME: (double [[X:%.*]]) { 7350a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg double [[X]] 7450a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast double [[TMP1]] to i64 7512660867SMatt Arsenault; CHECK-NEXT: ret i64 [[XOR]] 7612660867SMatt Arsenault; 7712660867SMatt Arsenault %bc = bitcast double %x to i64 7812660867SMatt Arsenault %xor = xor i64 %bc, -9223372036854775808 7912660867SMatt Arsenault ret i64 %xor 8012660867SMatt Arsenault} 8112660867SMatt Arsenault 8212660867SMatt Arsenaultdefine <2 x i64> @fneg_as_int_v2f64(<2 x double> %x) { 8312660867SMatt Arsenault; CHECK-LABEL: define <2 x i64> @fneg_as_int_v2f64 8412660867SMatt Arsenault; CHECK-SAME: (<2 x double> [[X:%.*]]) { 8550a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg <2 x double> [[X]] 8650a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x double> [[TMP1]] to <2 x i64> 8712660867SMatt Arsenault; CHECK-NEXT: ret <2 x i64> [[XOR]] 8812660867SMatt Arsenault; 8912660867SMatt Arsenault %bc = bitcast <2 x double> %x to <2 x i64> 9012660867SMatt Arsenault %xor = xor <2 x i64> %bc, <i64 -9223372036854775808, i64 -9223372036854775808> 9112660867SMatt Arsenault ret <2 x i64> %xor 9212660867SMatt Arsenault} 9312660867SMatt Arsenault 9412660867SMatt Arsenaultdefine i64 @fneg_as_int_f64_swap(double %x) { 9512660867SMatt Arsenault; CHECK-LABEL: define i64 @fneg_as_int_f64_swap 9612660867SMatt Arsenault; CHECK-SAME: (double [[X:%.*]]) { 9750a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg double [[X]] 9850a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast double [[TMP1]] to i64 9912660867SMatt Arsenault; CHECK-NEXT: ret i64 [[XOR]] 10012660867SMatt Arsenault; 10112660867SMatt Arsenault %bc = bitcast double %x to i64 10212660867SMatt Arsenault %xor = xor i64 -9223372036854775808, %bc 10312660867SMatt Arsenault ret i64 %xor 10412660867SMatt Arsenault} 10512660867SMatt Arsenault 10612660867SMatt Arsenaultdefine i32 @fneg_as_int_f32(float %x) { 10712660867SMatt Arsenault; CHECK-LABEL: define i32 @fneg_as_int_f32 10812660867SMatt Arsenault; CHECK-SAME: (float [[X:%.*]]) { 10950a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg float [[X]] 11050a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast float [[TMP1]] to i32 11112660867SMatt Arsenault; CHECK-NEXT: ret i32 [[XOR]] 11212660867SMatt Arsenault; 11312660867SMatt Arsenault %bc = bitcast float %x to i32 11412660867SMatt Arsenault %xor = xor i32 %bc, -2147483648 11512660867SMatt Arsenault ret i32 %xor 11612660867SMatt Arsenault} 11712660867SMatt Arsenault 11812660867SMatt Arsenaultdefine <2 x i32> @fneg_as_int_v2f32(<2 x float> %x) { 11912660867SMatt Arsenault; CHECK-LABEL: define <2 x i32> @fneg_as_int_v2f32 12012660867SMatt Arsenault; CHECK-SAME: (<2 x float> [[X:%.*]]) { 12150a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg <2 x float> [[X]] 12250a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x float> [[TMP1]] to <2 x i32> 12312660867SMatt Arsenault; CHECK-NEXT: ret <2 x i32> [[XOR]] 12412660867SMatt Arsenault; 12512660867SMatt Arsenault %bc = bitcast <2 x float> %x to <2 x i32> 12612660867SMatt Arsenault %xor = xor <2 x i32> %bc, <i32 -2147483648, i32 -2147483648> 12712660867SMatt Arsenault ret <2 x i32> %xor 12812660867SMatt Arsenault} 12912660867SMatt Arsenault 13012660867SMatt Arsenaultdefine <2 x i32> @not_fneg_as_int_v2f32_nonsplat(<2 x float> %x) { 13112660867SMatt Arsenault; CHECK-LABEL: define <2 x i32> @not_fneg_as_int_v2f32_nonsplat 13212660867SMatt Arsenault; CHECK-SAME: (<2 x float> [[X:%.*]]) { 13312660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = bitcast <2 x float> [[X]] to <2 x i32> 13412660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor <2 x i32> [[BC]], <i32 -2147483648, i32 -2147483647> 13512660867SMatt Arsenault; CHECK-NEXT: ret <2 x i32> [[XOR]] 13612660867SMatt Arsenault; 13712660867SMatt Arsenault %bc = bitcast <2 x float> %x to <2 x i32> 13812660867SMatt Arsenault %xor = xor <2 x i32> %bc, <i32 -2147483648, i32 -2147483647> 13912660867SMatt Arsenault ret <2 x i32> %xor 14012660867SMatt Arsenault} 14112660867SMatt Arsenault 142d9a5aa8eSNikita Popovdefine <3 x i32> @fneg_as_int_v3f32_poison(<3 x float> %x) { 143d9a5aa8eSNikita Popov; CHECK-LABEL: define <3 x i32> @fneg_as_int_v3f32_poison 14412660867SMatt Arsenault; CHECK-SAME: (<3 x float> [[X:%.*]]) { 14550a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg <3 x float> [[X]] 14650a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast <3 x float> [[TMP1]] to <3 x i32> 14712660867SMatt Arsenault; CHECK-NEXT: ret <3 x i32> [[XOR]] 14812660867SMatt Arsenault; 14912660867SMatt Arsenault %bc = bitcast <3 x float> %x to <3 x i32> 150d9a5aa8eSNikita Popov %xor = xor <3 x i32> %bc, <i32 -2147483648, i32 poison, i32 -2147483648> 15112660867SMatt Arsenault ret <3 x i32> %xor 15212660867SMatt Arsenault} 15312660867SMatt Arsenault 15412660867SMatt Arsenault; Make sure that only a bitcast is transformed. 15512660867SMatt Arsenaultdefine i64 @fneg_as_int_f64_not_bitcast(double %x) { 15612660867SMatt Arsenault; CHECK-LABEL: define i64 @fneg_as_int_f64_not_bitcast 15712660867SMatt Arsenault; CHECK-SAME: (double [[X:%.*]]) { 15812660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = fptoui double [[X]] to i64 15912660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i64 [[BC]], -9223372036854775808 16012660867SMatt Arsenault; CHECK-NEXT: ret i64 [[XOR]] 16112660867SMatt Arsenault; 16212660867SMatt Arsenault %bc = fptoui double %x to i64 16312660867SMatt Arsenault %xor = xor i64 %bc, -9223372036854775808 16412660867SMatt Arsenault ret i64 %xor 16512660867SMatt Arsenault} 16612660867SMatt Arsenault 16712660867SMatt Arsenaultdefine float @not_fneg_as_int_f32_bitcast_from_v2f16(<2 x half> %val) { 16812660867SMatt Arsenault; CHECK-LABEL: define float @not_fneg_as_int_f32_bitcast_from_v2f16 16912660867SMatt Arsenault; CHECK-SAME: (<2 x half> [[VAL:%.*]]) { 17012660867SMatt Arsenault; CHECK-NEXT: [[BITCAST:%.*]] = bitcast <2 x half> [[VAL]] to i32 17112660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483648 17212660867SMatt Arsenault; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float 17312660867SMatt Arsenault; CHECK-NEXT: ret float [[FNEG]] 17412660867SMatt Arsenault; 17512660867SMatt Arsenault %bitcast = bitcast <2 x half> %val to i32 17612660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483648 17712660867SMatt Arsenault %fneg = bitcast i32 %xor to float 17812660867SMatt Arsenault ret float %fneg 17912660867SMatt Arsenault} 18012660867SMatt Arsenault 18112660867SMatt Arsenaultdefine float @not_fneg_as_int_f32_bitcast_from_v2i16(<2 x i16> %val) { 18212660867SMatt Arsenault; CHECK-LABEL: define float @not_fneg_as_int_f32_bitcast_from_v2i16 18312660867SMatt Arsenault; CHECK-SAME: (<2 x i16> [[VAL:%.*]]) { 18412660867SMatt Arsenault; CHECK-NEXT: [[BITCAST:%.*]] = bitcast <2 x i16> [[VAL]] to i32 18512660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i32 [[BITCAST]], -2147483648 18612660867SMatt Arsenault; CHECK-NEXT: [[FNEG:%.*]] = bitcast i32 [[XOR]] to float 18712660867SMatt Arsenault; CHECK-NEXT: ret float [[FNEG]] 18812660867SMatt Arsenault; 18912660867SMatt Arsenault %bitcast = bitcast <2 x i16> %val to i32 19012660867SMatt Arsenault %xor = xor i32 %bitcast, -2147483648 19112660867SMatt Arsenault %fneg = bitcast i32 %xor to float 19212660867SMatt Arsenault ret float %fneg 19312660867SMatt Arsenault} 19412660867SMatt Arsenault 19512660867SMatt Arsenaultdefine i128 @fneg_as_int_fp128_f64_mask(fp128 %x) { 19612660867SMatt Arsenault; CHECK-LABEL: define i128 @fneg_as_int_fp128_f64_mask 19712660867SMatt Arsenault; CHECK-SAME: (fp128 [[X:%.*]]) { 19812660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = bitcast fp128 [[X]] to i128 19912660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i128 [[BC]], -9223372036854775808 20012660867SMatt Arsenault; CHECK-NEXT: ret i128 [[XOR]] 20112660867SMatt Arsenault; 20212660867SMatt Arsenault %bc = bitcast fp128 %x to i128 20312660867SMatt Arsenault %xor = xor i128 %bc, -9223372036854775808 20412660867SMatt Arsenault ret i128 %xor 20512660867SMatt Arsenault} 20612660867SMatt Arsenault 20712660867SMatt Arsenaultdefine i128 @fneg_as_int_fp128_f128_mask(fp128 %x) { 20812660867SMatt Arsenault; CHECK-LABEL: define i128 @fneg_as_int_fp128_f128_mask 20912660867SMatt Arsenault; CHECK-SAME: (fp128 [[X:%.*]]) { 21050a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg fp128 [[X]] 21150a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast fp128 [[TMP1]] to i128 21212660867SMatt Arsenault; CHECK-NEXT: ret i128 [[XOR]] 21312660867SMatt Arsenault; 21412660867SMatt Arsenault %bc = bitcast fp128 %x to i128 21512660867SMatt Arsenault %xor = xor i128 %bc, -170141183460469231731687303715884105728 21612660867SMatt Arsenault ret i128 %xor 21712660867SMatt Arsenault} 21812660867SMatt Arsenault 21912660867SMatt Arsenaultdefine i16 @fneg_as_int_f16(half %x) { 22012660867SMatt Arsenault; CHECK-LABEL: define i16 @fneg_as_int_f16 22112660867SMatt Arsenault; CHECK-SAME: (half [[X:%.*]]) { 22250a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg half [[X]] 22350a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast half [[TMP1]] to i16 22412660867SMatt Arsenault; CHECK-NEXT: ret i16 [[XOR]] 22512660867SMatt Arsenault; 22612660867SMatt Arsenault %bc = bitcast half %x to i16 22712660867SMatt Arsenault %xor = xor i16 %bc, -32768 22812660867SMatt Arsenault ret i16 %xor 22912660867SMatt Arsenault} 23012660867SMatt Arsenault 23112660867SMatt Arsenaultdefine <2 x i16> @fneg_as_int_v2f16(<2 x half> %x) { 23212660867SMatt Arsenault; CHECK-LABEL: define <2 x i16> @fneg_as_int_v2f16 23312660867SMatt Arsenault; CHECK-SAME: (<2 x half> [[X:%.*]]) { 23450a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg <2 x half> [[X]] 23550a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x half> [[TMP1]] to <2 x i16> 23612660867SMatt Arsenault; CHECK-NEXT: ret <2 x i16> [[XOR]] 23712660867SMatt Arsenault; 23812660867SMatt Arsenault %bc = bitcast <2 x half> %x to <2 x i16> 23912660867SMatt Arsenault %xor = xor <2 x i16> %bc, <i16 -32768, i16 -32768> 24012660867SMatt Arsenault ret <2 x i16> %xor 24112660867SMatt Arsenault} 24212660867SMatt Arsenault 24312660867SMatt Arsenaultdefine i16 @fneg_as_int_bf16(bfloat %x) { 24412660867SMatt Arsenault; CHECK-LABEL: define i16 @fneg_as_int_bf16 24512660867SMatt Arsenault; CHECK-SAME: (bfloat [[X:%.*]]) { 24650a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg bfloat [[X]] 24750a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast bfloat [[TMP1]] to i16 24812660867SMatt Arsenault; CHECK-NEXT: ret i16 [[XOR]] 24912660867SMatt Arsenault; 25012660867SMatt Arsenault %bc = bitcast bfloat %x to i16 25112660867SMatt Arsenault %xor = xor i16 %bc, -32768 25212660867SMatt Arsenault ret i16 %xor 25312660867SMatt Arsenault} 25412660867SMatt Arsenault 25512660867SMatt Arsenaultdefine <2 x i16> @fneg_as_int_v2bf16(<2 x bfloat> %x) { 25612660867SMatt Arsenault; CHECK-LABEL: define <2 x i16> @fneg_as_int_v2bf16 25712660867SMatt Arsenault; CHECK-SAME: (<2 x bfloat> [[X:%.*]]) { 25850a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg <2 x bfloat> [[X]] 25950a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast <2 x bfloat> [[TMP1]] to <2 x i16> 26012660867SMatt Arsenault; CHECK-NEXT: ret <2 x i16> [[XOR]] 26112660867SMatt Arsenault; 26212660867SMatt Arsenault %bc = bitcast <2 x bfloat> %x to <2 x i16> 26312660867SMatt Arsenault %xor = xor <2 x i16> %bc, <i16 -32768, i16 -32768> 26412660867SMatt Arsenault ret <2 x i16> %xor 26512660867SMatt Arsenault} 26612660867SMatt Arsenault 26712660867SMatt Arsenaultdefine i80 @fneg_as_int_x86_fp80_f64_mask(x86_fp80 %x) { 26812660867SMatt Arsenault; CHECK-LABEL: define i80 @fneg_as_int_x86_fp80_f64_mask 26912660867SMatt Arsenault; CHECK-SAME: (x86_fp80 [[X:%.*]]) { 27050a9b3d8SMatt Arsenault; CHECK-NEXT: [[TMP1:%.*]] = fneg x86_fp80 [[X]] 27150a9b3d8SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = bitcast x86_fp80 [[TMP1]] to i80 27212660867SMatt Arsenault; CHECK-NEXT: ret i80 [[XOR]] 27312660867SMatt Arsenault; 27412660867SMatt Arsenault %bc = bitcast x86_fp80 %x to i80 27512660867SMatt Arsenault %xor = xor i80 %bc, -604462909807314587353088 27612660867SMatt Arsenault ret i80 %xor 27712660867SMatt Arsenault} 27812660867SMatt Arsenault 27912660867SMatt Arsenaultdefine i128 @fneg_as_int_ppc_fp128_f64_mask(ppc_fp128 %x) { 28012660867SMatt Arsenault; CHECK-LABEL: define i128 @fneg_as_int_ppc_fp128_f64_mask 28112660867SMatt Arsenault; CHECK-SAME: (ppc_fp128 [[X:%.*]]) { 28212660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = bitcast ppc_fp128 [[X]] to i128 28312660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i128 [[BC]], -9223372036854775808 28412660867SMatt Arsenault; CHECK-NEXT: ret i128 [[XOR]] 28512660867SMatt Arsenault; 28612660867SMatt Arsenault %bc = bitcast ppc_fp128 %x to i128 28712660867SMatt Arsenault %xor = xor i128 %bc, -9223372036854775808 28812660867SMatt Arsenault ret i128 %xor 28912660867SMatt Arsenault} 29012660867SMatt Arsenault 29112660867SMatt Arsenaultdefine i128 @fneg_as_int_ppc_fp128_f128_mask(ppc_fp128 %x) { 29212660867SMatt Arsenault; CHECK-LABEL: define i128 @fneg_as_int_ppc_fp128_f128_mask 29312660867SMatt Arsenault; CHECK-SAME: (ppc_fp128 [[X:%.*]]) { 29412660867SMatt Arsenault; CHECK-NEXT: [[BC:%.*]] = bitcast ppc_fp128 [[X]] to i128 29512660867SMatt Arsenault; CHECK-NEXT: [[XOR:%.*]] = xor i128 [[BC]], -170141183460469231731687303715884105728 29612660867SMatt Arsenault; CHECK-NEXT: ret i128 [[XOR]] 29712660867SMatt Arsenault; 29812660867SMatt Arsenault %bc = bitcast ppc_fp128 %x to i128 29912660867SMatt Arsenault %xor = xor i128 %bc, -170141183460469231731687303715884105728 30012660867SMatt Arsenault ret i128 %xor 30112660867SMatt Arsenault} 302