[llvm] 5a4bd07 - [InstCombine][NFC] Pre-commit baseline test for D113442.

Huihui Zhang via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 10 19:45:52 PST 2021


Author: Huihui Zhang
Date: 2021-11-10T19:45:27-08:00
New Revision: 5a4bd07ea4643fb9d1d11f690ca6c0e12f4cf6b5

URL: https://github.com/llvm/llvm-project/commit/5a4bd07ea4643fb9d1d11f690ca6c0e12f4cf6b5
DIFF: https://github.com/llvm/llvm-project/commit/5a4bd07ea4643fb9d1d11f690ca6c0e12f4cf6b5.diff

LOG: [InstCombine][NFC] Pre-commit baseline test for D113442.

Add baseline test to check for folding select into binop operand
enabled through D113442.

Added: 
    llvm/test/Transforms/InstCombine/select-binop-foldable-floating-point.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/select-binop-foldable-floating-point.ll b/llvm/test/Transforms/InstCombine/select-binop-foldable-floating-point.ll
new file mode 100644
index 000000000000..db989def65db
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/select-binop-foldable-floating-point.ll
@@ -0,0 +1,202 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+define float @select_fadd(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fadd(
+; CHECK-NEXT:    [[C:%.*]] = fadd float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fadd float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fadd_swapped(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fadd_swapped(
+; CHECK-NEXT:    [[C:%.*]] = fadd float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fadd float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fadd_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fadd_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fadd fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fadd fast float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fadd_swapped_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fadd_swapped_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fadd fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fadd fast float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fmul(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fmul(
+; CHECK-NEXT:    [[C:%.*]] = fmul float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fmul float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fmul_swapped(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fmul_swapped(
+; CHECK-NEXT:    [[C:%.*]] = fmul float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fmul float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fmul_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fmul_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fmul fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fmul fast float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fmul_swapped_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fmul_swapped_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fmul fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fmul fast float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fsub(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fsub(
+; CHECK-NEXT:    [[C:%.*]] = fsub float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fsub float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fsub_swapped(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fsub_swapped(
+; CHECK-NEXT:    [[C:%.*]] = fsub float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fsub float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fsub_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fsub_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fsub fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fsub fast float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fsub_swapped_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fsub_swapped_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fsub fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fsub fast float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+; 'fsub' can only fold on the amount subtracted.
+define float @select_fsub_invalid(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fsub_invalid(
+; CHECK-NEXT:    [[C:%.*]] = fsub float [[B:%.*]], [[A:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fsub float %B, %A
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fdiv(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fdiv(
+; CHECK-NEXT:    [[C:%.*]] = fdiv float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fdiv float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fdiv_swapped(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fdiv_swapped(
+; CHECK-NEXT:    [[C:%.*]] = fdiv float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fdiv float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+define float @select_fdiv_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fdiv_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fdiv fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fdiv fast float %A, %B
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}
+
+define float @select_fdiv_swapped_fast_math(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fdiv_swapped_fast_math(
+; CHECK-NEXT:    [[C:%.*]] = fdiv fast float [[A:%.*]], [[B:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[A]], float [[C]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fdiv fast float %A, %B
+  %D = select i1 %cond, float %A, float %C
+  ret float %D
+}
+
+; 'fdiv' can only fold on the divisor amount.
+define float @select_fdiv_invalid(i1 %cond, float %A, float %B) {
+; CHECK-LABEL: @select_fdiv_invalid(
+; CHECK-NEXT:    [[C:%.*]] = fdiv float [[B:%.*]], [[A:%.*]]
+; CHECK-NEXT:    [[D:%.*]] = select i1 [[COND:%.*]], float [[C]], float [[A]]
+; CHECK-NEXT:    ret float [[D]]
+;
+  %C = fdiv float %B, %A
+  %D = select i1 %cond, float %C, float %A
+  ret float %D
+}


        


More information about the llvm-commits mailing list