diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-11-04 08:23:08 -0500 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-11-04 08:23:08 -0500 |
| commit | ad87f244b4228699806e757fedb39f8996c595f9 (patch) | |
| tree | cd7d22782c7277c4ba287310e44fd2df2bd58cf1 /llvm/test/Transforms/InstSimplify | |
| parent | 82888b78d47ed132aee4993e00669ce7cbd963e0 (diff) | |
| download | bcm5719-llvm-ad87f244b4228699806e757fedb39f8996c595f9.tar.gz bcm5719-llvm-ad87f244b4228699806e757fedb39f8996c595f9.zip | |
[InstSimplify] add more tests for fcmp+select; NFC
The easy code fix won't catch non-canonical mismatched
constant patterns, so adding extra coverage for those in
case we decide that's important (but seems unlikely).
Diffstat (limited to 'llvm/test/Transforms/InstSimplify')
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/fcmp-select.ll | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/llvm/test/Transforms/InstSimplify/fcmp-select.ll b/llvm/test/Transforms/InstSimplify/fcmp-select.ll index cea28639898..8e04a9b4674 100644 --- a/llvm/test/Transforms/InstSimplify/fcmp-select.ll +++ b/llvm/test/Transforms/InstSimplify/fcmp-select.ll @@ -126,29 +126,29 @@ define float @oeq_zero_swapped_nsz(float %x) { ret float %cond } -; X != 0.0 ? X : -0.0 --> X +; X != 0.0 ? X : 0.0 --> X define double @une_zero_nsz(double %x) { ; CHECK-LABEL: @une_zero_nsz( ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[X:%.*]], 0.000000e+00 -; CHECK-NEXT: [[COND:%.*]] = select ninf nsz i1 [[CMP]], double [[X]], double -0.000000e+00 +; CHECK-NEXT: [[COND:%.*]] = select ninf nsz i1 [[CMP]], double [[X]], double 0.000000e+00 ; CHECK-NEXT: ret double [[COND]] ; %cmp = fcmp une double %x, 0.0 - %cond = select nsz ninf i1 %cmp, double %x, double -0.0 + %cond = select nsz ninf i1 %cmp, double %x, double 0.0 ret double %cond } -; X != 0.0 ? -0.0 : X --> 0.0 +; X != 0.0 ? 0.0 : X --> 0.0 define <2 x double> @une_zero_swapped_nsz(<2 x double> %x) { ; CHECK-LABEL: @une_zero_swapped_nsz( -; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> [[X:%.*]], <double -0.000000e+00, double 0.000000e+00> -; CHECK-NEXT: [[COND:%.*]] = select nsz <2 x i1> [[CMP]], <2 x double> <double 0.000000e+00, double -0.000000e+00>, <2 x double> [[X]] +; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> [[X:%.*]], zeroinitializer +; CHECK-NEXT: [[COND:%.*]] = select nsz <2 x i1> [[CMP]], <2 x double> zeroinitializer, <2 x double> [[X]] ; CHECK-NEXT: ret <2 x double> [[COND]] ; - %cmp = fcmp une <2 x double> %x, <double -0.0, double 0.0> - %cond = select nsz <2 x i1> %cmp, <2 x double> <double 0.0, double -0.0>, <2 x double> %x + %cmp = fcmp une <2 x double> %x, <double 0.0, double 0.0> + %cond = select nsz <2 x i1> %cmp, <2 x double> <double 0.0, double 0.0>, <2 x double> %x ret <2 x double> %cond } @@ -204,6 +204,34 @@ define <2 x double> @une_swapped_nsz(<2 x double> %x, <2 x double> %y) { ret <2 x double> %cond } +; Harder - mismatched zero constants (not typical due to canonicalization): +; X != 0.0 ? X : -0.0 --> X + +define double @une_zero_mismatch_nsz(double %x) { +; CHECK-LABEL: @une_zero_mismatch_nsz( +; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[X:%.*]], 0.000000e+00 +; CHECK-NEXT: [[COND:%.*]] = select ninf nsz i1 [[CMP]], double [[X]], double -0.000000e+00 +; CHECK-NEXT: ret double [[COND]] +; + %cmp = fcmp une double %x, 0.0 + %cond = select nsz ninf i1 %cmp, double %x, double -0.0 + ret double %cond +} + +; Even harder - mismatched vector zero constants (not typical due to canonicalization): +; X != 0.0 ? -0.0 : X --> 0.0 + +define <2 x double> @une_zero_mismatch_swapped_nsz(<2 x double> %x) { +; CHECK-LABEL: @une_zero_mismatch_swapped_nsz( +; CHECK-NEXT: [[CMP:%.*]] = fcmp une <2 x double> [[X:%.*]], <double -0.000000e+00, double 0.000000e+00> +; CHECK-NEXT: [[COND:%.*]] = select nsz <2 x i1> [[CMP]], <2 x double> <double 0.000000e+00, double -0.000000e+00>, <2 x double> [[X]] +; CHECK-NEXT: ret <2 x double> [[COND]] +; + %cmp = fcmp une <2 x double> %x, <double -0.0, double 0.0> + %cond = select nsz <2 x i1> %cmp, <2 x double> <double 0.0, double -0.0>, <2 x double> %x + ret <2 x double> %cond +} + define double @une_could_be_negzero(double %x, double %y) { ; CHECK-LABEL: @une_could_be_negzero( ; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[X:%.*]], [[Y:%.*]] |

