diff options
Diffstat (limited to 'llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll')
| -rw-r--r-- | llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll | 76 |
1 files changed, 60 insertions, 16 deletions
diff --git a/llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll b/llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll index 56f39450af9..79eb349ed7e 100644 --- a/llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll +++ b/llvm/test/Transforms/InstSimplify/floating-point-arithmetic.ll @@ -604,8 +604,7 @@ define float @maxnum_same_args(float %x) { define float @minnum_x_minnum_x_y(float %x, float %y) { ; CHECK-LABEL: @minnum_x_minnum_x_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[X]], float [[A]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.minnum.f32(float %x, float %y) %b = call float @llvm.minnum.f32(float %x, float %a) @@ -615,8 +614,7 @@ define float @minnum_x_minnum_x_y(float %x, float %y) { define float @minnum_y_minnum_x_y(float %x, float %y) { ; CHECK-LABEL: @minnum_y_minnum_x_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[Y]], float [[A]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.minnum.f32(float %x, float %y) %b = call float @llvm.minnum.f32(float %y, float %a) @@ -626,8 +624,7 @@ define float @minnum_y_minnum_x_y(float %x, float %y) { define float @minnum_x_y_minnum_x(float %x, float %y) { ; CHECK-LABEL: @minnum_x_y_minnum_x( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[A]], float [[X]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.minnum.f32(float %x, float %y) %b = call float @llvm.minnum.f32(float %a, float %x) @@ -637,19 +634,43 @@ define float @minnum_x_y_minnum_x(float %x, float %y) { define float @minnum_x_y_minnum_y(float %x, float %y) { ; CHECK-LABEL: @minnum_x_y_minnum_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[A]], float [[Y]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.minnum.f32(float %x, float %y) %b = call float @llvm.minnum.f32(float %a, float %y) ret float %b } +; negative test + +define float @minnum_z_minnum_x_y(float %x, float %y, float %z) { +; CHECK-LABEL: @minnum_z_minnum_x_y( +; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) +; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[Z:%.*]], float [[A]]) +; CHECK-NEXT: ret float [[B]] +; + %a = call float @llvm.minnum.f32(float %x, float %y) + %b = call float @llvm.minnum.f32(float %z, float %a) + ret float %b +} + +; negative test + +define float @minnum_x_y_minnum_z(float %x, float %y, float %z) { +; CHECK-LABEL: @minnum_x_y_minnum_z( +; CHECK-NEXT: [[A:%.*]] = call float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]]) +; CHECK-NEXT: [[B:%.*]] = call float @llvm.minnum.f32(float [[A]], float [[Z:%.*]]) +; CHECK-NEXT: ret float [[B]] +; + %a = call float @llvm.minnum.f32(float %x, float %y) + %b = call float @llvm.minnum.f32(float %a, float %z) + ret float %b +} + define float @maxnum_x_maxnum_x_y(float %x, float %y) { ; CHECK-LABEL: @maxnum_x_maxnum_x_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[X]], float [[A]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.maxnum.f32(float %x, float %y) %b = call float @llvm.maxnum.f32(float %x, float %a) @@ -659,8 +680,7 @@ define float @maxnum_x_maxnum_x_y(float %x, float %y) { define float @maxnum_y_maxnum_x_y(float %x, float %y) { ; CHECK-LABEL: @maxnum_y_maxnum_x_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[Y]], float [[A]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.maxnum.f32(float %x, float %y) %b = call float @llvm.maxnum.f32(float %y, float %a) @@ -670,8 +690,7 @@ define float @maxnum_y_maxnum_x_y(float %x, float %y) { define float @maxnum_x_y_maxnum_x(float %x, float %y) { ; CHECK-LABEL: @maxnum_x_y_maxnum_x( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[A]], float [[X]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.maxnum.f32(float %x, float %y) %b = call float @llvm.maxnum.f32(float %a, float %x) @@ -681,11 +700,36 @@ define float @maxnum_x_y_maxnum_x(float %x, float %y) { define float @maxnum_x_y_maxnum_y(float %x, float %y) { ; CHECK-LABEL: @maxnum_x_y_maxnum_y( ; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) -; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[A]], float [[Y]]) -; CHECK-NEXT: ret float [[B]] +; CHECK-NEXT: ret float [[A]] ; %a = call float @llvm.maxnum.f32(float %x, float %y) %b = call float @llvm.maxnum.f32(float %a, float %y) ret float %b } +; negative test + +define float @maxnum_z_maxnum_x_y(float %x, float %y, float %z) { +; CHECK-LABEL: @maxnum_z_maxnum_x_y( +; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) +; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[Z:%.*]], float [[A]]) +; CHECK-NEXT: ret float [[B]] +; + %a = call float @llvm.maxnum.f32(float %x, float %y) + %b = call float @llvm.maxnum.f32(float %z, float %a) + ret float %b +} + +; negative test + +define float @maxnum_x_y_maxnum_z(float %x, float %y, float %z) { +; CHECK-LABEL: @maxnum_x_y_maxnum_z( +; CHECK-NEXT: [[A:%.*]] = call float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]]) +; CHECK-NEXT: [[B:%.*]] = call float @llvm.maxnum.f32(float [[A]], float [[Z:%.*]]) +; CHECK-NEXT: ret float [[B]] +; + %a = call float @llvm.maxnum.f32(float %x, float %y) + %b = call float @llvm.maxnum.f32(float %a, float %z) + ret float %b +} + |

