[llvm] 7ffc9aa - [InstCombine] add RUN to show miscompile of pow expansion; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 15 06:30:10 PDT 2020


Author: Sanjay Patel
Date: 2020-09-15T09:29:48-04:00
New Revision: 7ffc9aa538dfa3facbbb09d3b0d517a59e967d0e

URL: https://github.com/llvm/llvm-project/commit/7ffc9aa538dfa3facbbb09d3b0d517a59e967d0e
DIFF: https://github.com/llvm/llvm-project/commit/7ffc9aa538dfa3facbbb09d3b0d517a59e967d0e.diff

LOG: [InstCombine] add RUN to show miscompile of pow expansion; NFC

The code drops the sqrt op instead of bailing out,
so this is very wrong.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/pow-4.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/pow-4.ll b/llvm/test/Transforms/InstCombine/pow-4.ll
index 4aac27fe72f0..e68dfb857caa 100644
--- a/llvm/test/Transforms/InstCombine/pow-4.ll
+++ b/llvm/test/Transforms/InstCombine/pow-4.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
-; RUN: opt -instcombine -S < %s | FileCheck %s
+; RUN: opt -instcombine -S < %s                        | FileCheck %s --check-prefixes=CHECK,SQRT
+; RUN: opt -instcombine -S < %s -disable-builtin sqrt  | FileCheck %s --check-prefixes=CHECK,NOSQRT
 
 declare double @llvm.pow.f64(double, double)
 declare float @llvm.pow.f32(float, float)
@@ -151,31 +152,50 @@ define double @test_simplify_neg_16_5(double %x) {
 }
 
 ; pow(x, 16.5) with double
+; FIXME: This is wrong without sqrt.
+
 define double @test_simplify_16_5_libcall(double %x) {
-; CHECK-LABEL: @test_simplify_16_5_libcall(
-; CHECK-NEXT:    [[SQRT:%.*]] = call fast double @sqrt(double [[X:%.*]])
-; CHECK-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
-; CHECK-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
-; CHECK-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
-; CHECK-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
-; CHECK-NEXT:    [[TMP4:%.*]] = fmul fast double [[TMP3]], [[SQRT]]
-; CHECK-NEXT:    ret double [[TMP4]]
+; SQRT-LABEL: @test_simplify_16_5_libcall(
+; SQRT-NEXT:    [[SQRT:%.*]] = call fast double @sqrt(double [[X:%.*]])
+; SQRT-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
+; SQRT-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
+; SQRT-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
+; SQRT-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
+; SQRT-NEXT:    [[TMP4:%.*]] = fmul fast double [[TMP3]], [[SQRT]]
+; SQRT-NEXT:    ret double [[TMP4]]
+;
+; NOSQRT-LABEL: @test_simplify_16_5_libcall(
+; NOSQRT-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X:%.*]], [[X]]
+; NOSQRT-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
+; NOSQRT-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
+; NOSQRT-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
+; NOSQRT-NEXT:    ret double [[TMP3]]
 ;
   %1 = call fast double @pow(double %x, double 1.650000e+01)
   ret double %1
 }
 
 ; pow(x, -16.5) with double
+; FIXME: This is wrong without sqrt.
+
 define double @test_simplify_neg_16_5_libcall(double %x) {
-; CHECK-LABEL: @test_simplify_neg_16_5_libcall(
-; CHECK-NEXT:    [[SQRT:%.*]] = call fast double @sqrt(double [[X:%.*]])
-; CHECK-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
-; CHECK-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
-; CHECK-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
-; CHECK-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
-; CHECK-NEXT:    [[TMP4:%.*]] = fmul fast double [[TMP3]], [[SQRT]]
-; CHECK-NEXT:    [[RECIPROCAL:%.*]] = fdiv fast double 1.000000e+00, [[TMP4]]
-; CHECK-NEXT:    ret double [[RECIPROCAL]]
+; SQRT-LABEL: @test_simplify_neg_16_5_libcall(
+; SQRT-NEXT:    [[SQRT:%.*]] = call fast double @sqrt(double [[X:%.*]])
+; SQRT-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X]], [[X]]
+; SQRT-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
+; SQRT-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
+; SQRT-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
+; SQRT-NEXT:    [[TMP4:%.*]] = fmul fast double [[TMP3]], [[SQRT]]
+; SQRT-NEXT:    [[RECIPROCAL:%.*]] = fdiv fast double 1.000000e+00, [[TMP4]]
+; SQRT-NEXT:    ret double [[RECIPROCAL]]
+;
+; NOSQRT-LABEL: @test_simplify_neg_16_5_libcall(
+; NOSQRT-NEXT:    [[SQUARE:%.*]] = fmul fast double [[X:%.*]], [[X]]
+; NOSQRT-NEXT:    [[TMP1:%.*]] = fmul fast double [[SQUARE]], [[SQUARE]]
+; NOSQRT-NEXT:    [[TMP2:%.*]] = fmul fast double [[TMP1]], [[TMP1]]
+; NOSQRT-NEXT:    [[TMP3:%.*]] = fmul fast double [[TMP2]], [[TMP2]]
+; NOSQRT-NEXT:    [[RECIPROCAL:%.*]] = fdiv fast double 1.000000e+00, [[TMP3]]
+; NOSQRT-NEXT:    ret double [[RECIPROCAL]]
 ;
   %1 = call fast double @pow(double %x, double -1.650000e+01)
   ret double %1


        


More information about the llvm-commits mailing list