diff options
| author | Sanjay Patel <spatel@rotateright.com> | 2019-04-05 20:54:35 +0000 |
|---|---|---|
| committer | Sanjay Patel <spatel@rotateright.com> | 2019-04-05 20:54:35 +0000 |
| commit | c538c501134c98f22513d5254c0b912e71107ef9 (patch) | |
| tree | 2c4a4cd06dd87d989228daf8687a8e42823e9cb3 | |
| parent | d7489c38f96dacfbb61117f9a3a56df58244922c (diff) | |
| download | bcm5719-llvm-c538c501134c98f22513d5254c0b912e71107ef9.tar.gz bcm5719-llvm-c538c501134c98f22513d5254c0b912e71107ef9.zip | |
[InstCombine] add more tests for fmul+fdiv+sqrt; NFC
llvm-svn: 357816
| -rw-r--r-- | llvm/test/Transforms/InstCombine/fmul-sqrt.ll | 45 |
1 files changed, 43 insertions, 2 deletions
diff --git a/llvm/test/Transforms/InstCombine/fmul-sqrt.ll b/llvm/test/Transforms/InstCombine/fmul-sqrt.ll index 8161e311ffd..62e57cdc3e1 100644 --- a/llvm/test/Transforms/InstCombine/fmul-sqrt.ll +++ b/llvm/test/Transforms/InstCombine/fmul-sqrt.ll @@ -88,8 +88,8 @@ define double @sqrt_a_sqrt_b_sqrt_c_sqrt_d_reassoc(double %a, double %b, double ret double %mul2 } -define double @sqrt_squared(double %x) { -; CHECK-LABEL: @sqrt_squared( +define double @rsqrt_squared(double %x) { +; CHECK-LABEL: @rsqrt_squared( ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X:%.*]]) ; CHECK-NEXT: [[RSQRT:%.*]] = fdiv fast double 1.000000e+00, [[SQRT]] ; CHECK-NEXT: [[SQUARED:%.*]] = fmul fast double [[RSQRT]], [[RSQRT]] @@ -101,6 +101,47 @@ define double @sqrt_squared(double %x) { ret double %squared } +define double @sqrt_divisor_squared(double %x, double %y) { +; CHECK-LABEL: @sqrt_divisor_squared( +; CHECK-NEXT: [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[X:%.*]]) +; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[Y:%.*]], [[SQRT]] +; CHECK-NEXT: [[SQUARED:%.*]] = fmul reassoc nnan nsz double [[DIV]], [[DIV]] +; CHECK-NEXT: ret double [[SQUARED]] +; + %sqrt = call double @llvm.sqrt.f64(double %x) + %div = fdiv double %y, %sqrt + %squared = fmul reassoc nnan nsz double %div, %div + ret double %squared +} + +define double @sqrt_dividend_squared(double %x, double %y) { +; CHECK-LABEL: @sqrt_dividend_squared( +; CHECK-NEXT: [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[X:%.*]]) +; CHECK-NEXT: [[DIV:%.*]] = fdiv fast double [[SQRT]], [[Y:%.*]] +; CHECK-NEXT: [[SQUARED:%.*]] = fmul fast double [[DIV]], [[DIV]] +; CHECK-NEXT: ret double [[SQUARED]] +; + %sqrt = call double @llvm.sqrt.f64(double %x) + %div = fdiv fast double %sqrt, %y + %squared = fmul fast double %div, %div + ret double %squared +} + +; Negative test - require 'nsz'. + +define double @sqrt_divisor_not_enough_FMF(double %x, double %y) { +; CHECK-LABEL: @sqrt_divisor_not_enough_FMF( +; CHECK-NEXT: [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[X:%.*]]) +; CHECK-NEXT: [[DIV:%.*]] = fdiv double [[Y:%.*]], [[SQRT]] +; CHECK-NEXT: [[SQUARED:%.*]] = fmul reassoc nnan double [[DIV]], [[DIV]] +; CHECK-NEXT: ret double [[SQUARED]] +; + %sqrt = call double @llvm.sqrt.f64(double %x) + %div = fdiv double %y, %sqrt + %squared = fmul reassoc nnan double %div, %div + ret double %squared +} + define double @sqrt_squared_extra_use(double %x) { ; CHECK-LABEL: @sqrt_squared_extra_use( ; CHECK-NEXT: [[SQRT:%.*]] = call fast double @llvm.sqrt.f64(double [[X:%.*]]) |

