brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.3 KiB · b77d6b5 Raw
188 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=instcombine %s | FileCheck %s3; RUN: opt -S -passes=instcombine -use-constant-fp-for-fixed-length-splat %s | FileCheck %s4 5define float @fabs_fneg_basic(float %x) {6; CHECK-LABEL: define float @fabs_fneg_basic(7; CHECK-SAME: float [[X:%.*]]) {8; CHECK-NEXT:    [[FABS:%.*]] = call float @llvm.fabs.f32(float [[X]])9; CHECK-NEXT:    ret float [[FABS]]10;11  %neg = fneg float %x12  %fabs = call float @llvm.fabs.f32(float %neg)13  ret float %fabs14}15 16define <2 x float> @fabs_fneg_v2f32(<2 x float> %x) {17; CHECK-LABEL: define <2 x float> @fabs_fneg_v2f32(18; CHECK-SAME: <2 x float> [[X:%.*]]) {19; CHECK-NEXT:    [[FABS:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> [[X]])20; CHECK-NEXT:    ret <2 x float> [[FABS]]21;22  %neg = fneg <2 x float> %x23  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %neg)24  ret <2 x float> %fabs25}26 27define double @fabs_fneg_f64(double %x) {28; CHECK-LABEL: define double @fabs_fneg_f64(29; CHECK-SAME: double [[X:%.*]]) {30; CHECK-NEXT:    [[FABS:%.*]] = call double @llvm.fabs.f64(double [[X]])31; CHECK-NEXT:    ret double [[FABS]]32;33  %neg = fneg double %x34  %fabs = call double @llvm.fabs.f64(double %neg)35  ret double %fabs36}37 38define <4 x double> @fabs_fneg_v4f64(<4 x double> %x) {39; CHECK-LABEL: define <4 x double> @fabs_fneg_v4f64(40; CHECK-SAME: <4 x double> [[X:%.*]]) {41; CHECK-NEXT:    [[FABS:%.*]] = call <4 x double> @llvm.fabs.v4f64(<4 x double> [[X]])42; CHECK-NEXT:    ret <4 x double> [[FABS]]43;44  %neg = fneg <4 x double> %x45  %fabs = call <4 x double> @llvm.fabs.v4f64(<4 x double> %neg)46  ret <4 x double> %fabs47}48 49define half @fabs_fneg_f16(half %x) {50; CHECK-LABEL: define half @fabs_fneg_f16(51; CHECK-SAME: half [[X:%.*]]) {52; CHECK-NEXT:    [[FABS:%.*]] = call half @llvm.fabs.f16(half [[X]])53; CHECK-NEXT:    ret half [[FABS]]54;55  %neg = fneg half %x56  %fabs = call half @llvm.fabs.f16(half %neg)57  ret half %fabs58}59 60define float @fabs_copysign_nnan(float %x, float %y) {61; CHECK-LABEL: define float @fabs_copysign_nnan(62; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {63; CHECK-NEXT:    [[FABS:%.*]] = call nnan float @llvm.fabs.f32(float [[X]])64; CHECK-NEXT:    ret float [[FABS]]65;66  %copysign = call float @llvm.copysign.f32(float %x, float %y)67  %fabs = call nnan float @llvm.fabs.f32(float %copysign)68  ret float %fabs69}70 71 72define float @fabs_copysign_ninf(float %x, float %y) {73; CHECK-LABEL: define float @fabs_copysign_ninf(74; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {75; CHECK-NEXT:    [[FABS:%.*]] = call ninf float @llvm.fabs.f32(float [[X]])76; CHECK-NEXT:    ret float [[FABS]]77;78  %copysign = call float @llvm.copysign.f32(float %x, float %y)79  %fabs = call ninf float @llvm.fabs.f32(float %copysign)80  ret float %fabs81}82 83define float @fabs_copysign_nsz(float %x, float %y) {84; CHECK-LABEL: define float @fabs_copysign_nsz(85; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {86; CHECK-NEXT:    [[FABS:%.*]] = call nsz float @llvm.fabs.f32(float [[X]])87; CHECK-NEXT:    ret float [[FABS]]88;89  %copysign = call float @llvm.copysign.f32(float %x, float %y)90  %fabs = call nsz float @llvm.fabs.f32(float %copysign)91  ret float %fabs92}93 94define float @fabs_copysign_nnan_negative(float %x, float %y) {95; CHECK-LABEL: define float @fabs_copysign_nnan_negative(96; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {97; CHECK-NEXT:    [[FABS:%.*]] = call nnan float @llvm.fabs.f32(float [[X]])98; CHECK-NEXT:    ret float [[FABS]]99;100  %copysign = call float @llvm.copysign.f32(float %x, float %y)101  %fabs = call nnan float @llvm.fabs.f32(float %copysign)102  ret float %fabs103}104 105 106define float @fabs_copysign_ninf_negative(float %x, float %y) {107; CHECK-LABEL: define float @fabs_copysign_ninf_negative(108; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {109; CHECK-NEXT:    [[FABS:%.*]] = call ninf float @llvm.fabs.f32(float [[X]])110; CHECK-NEXT:    ret float [[FABS]]111;112  %copysign = call float @llvm.copysign.f32(float %x, float %y)113  %fabs = call ninf float @llvm.fabs.f32(float %copysign)114  ret float %fabs115}116 117define float @fabs_copysign_nsz_negative(float %x, float %y) {118; CHECK-LABEL: define float @fabs_copysign_nsz_negative(119; CHECK-SAME: float [[X:%.*]], float [[Y:%.*]]) {120; CHECK-NEXT:    [[FABS:%.*]] = call nsz float @llvm.fabs.f32(float [[X]])121; CHECK-NEXT:    ret float [[FABS]]122;123  %copysign = call float @llvm.copysign.f32(float %x, float %y)124  %fabs = call nsz float @llvm.fabs.f32(float %copysign)125  ret float %fabs126}127 128define float @fabs_fneg_no_fabs(float %x) {129; CHECK-LABEL: define float @fabs_fneg_no_fabs(130; CHECK-SAME: float [[X:%.*]]) {131; CHECK-NEXT:    [[NEG:%.*]] = fneg float [[X]]132; CHECK-NEXT:    ret float [[NEG]]133;134  %neg = fneg float %x135  ret float %neg136}137 138define <2 x float> @fabs_fneg_splat_v2f32(<2 x float> %x) {139; CHECK-LABEL: define <2 x float> @fabs_fneg_splat_v2f32(140; CHECK-SAME: <2 x float> [[X:%.*]]) {141; CHECK-NEXT:    ret <2 x float> splat (float 2.000000e+00)142;143  %neg = fneg <2 x float> <float -2.0, float -2.0>144  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %neg)145  ret <2 x float> %fabs146}147 148 149define <2 x float> @fabs_fneg_splat_poison_v2f32(<2 x float> %x) {150; CHECK-LABEL: define <2 x float> @fabs_fneg_splat_poison_v2f32(151; CHECK-SAME: <2 x float> [[X:%.*]]) {152; CHECK-NEXT:    [[FABS:%.*]] = call <2 x float> @llvm.fabs.v2f32(<2 x float> <float -2.000000e+00, float poison>)153; CHECK-NEXT:    ret <2 x float> [[FABS]]154;155  %neg = fneg <2 x float> <float 2.0, float poison>156  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %neg)157  ret <2 x float> %fabs158}159 160define <2 x float> @fabs_fneg_non_splat_v2f32(<2 x float> %x) {161; CHECK-LABEL: define <2 x float> @fabs_fneg_non_splat_v2f32(162; CHECK-SAME: <2 x float> [[X:%.*]]) {163; CHECK-NEXT:    ret <2 x float> <float 2.000000e+00, float 3.000000e+00>164;165  %neg = fneg <2 x float> <float 2.0, float 3.0>166  %fabs = call <2 x float> @llvm.fabs.v2f32(<2 x float> %neg)167  ret <2 x float> %fabs168}169 170declare void @use(float)171 172define float @fabs_fneg_multi_use(float %x) {173; CHECK-LABEL: define float @fabs_fneg_multi_use(174; CHECK-SAME: float [[X:%.*]]) {175; CHECK-NEXT:    [[NEG:%.*]] = fneg float [[X]]176; CHECK-NEXT:    call void @use(float [[NEG]])177; CHECK-NEXT:    [[FABS:%.*]] = call float @llvm.fabs.f32(float [[X]])178; CHECK-NEXT:    ret float [[FABS]]179;180  %neg = fneg float %x181  call void @use(float %neg)182  %fabs = call float @llvm.fabs.f32(float %neg)183  ret float %fabs184}185 186 187 188