[llvm] r296621 - [PPC] add tests for select-of-constants with binop; NFC

Sanjay Patel via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 1 06:26:49 PST 2017


Author: spatel
Date: Wed Mar  1 08:26:49 2017
New Revision: 296621

URL: http://llvm.org/viewvc/llvm-project?rev=296621&view=rev
Log:
[PPC] add tests for select-of-constants with binop; NFC

Modified:
    llvm/trunk/test/CodeGen/PowerPC/select_const.ll

Modified: llvm/trunk/test/CodeGen/PowerPC/select_const.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/PowerPC/select_const.ll?rev=296621&r1=296620&r2=296621&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/PowerPC/select_const.ll (original)
+++ llvm/trunk/test/CodeGen/PowerPC/select_const.ll Wed Mar  1 08:26:49 2017
@@ -429,3 +429,560 @@ define i32 @select_C1_C2_signext(i1 sign
   ret i32 %sel
 }
 
+; A binary operator with constant after the select should always get folded into the select.
+
+define i8 @sel_constants_add_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_add_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    addi 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_add_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB21_1
+; NO_ISEL-NEXT:    b .LBB21_2
+; NO_ISEL-NEXT:  .LBB21_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB21_2:
+; NO_ISEL-NEXT:    addi 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = add i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_sub_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_sub_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    addi 3, 3, -5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_sub_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB22_1
+; NO_ISEL-NEXT:    b .LBB22_2
+; NO_ISEL-NEXT:  .LBB22_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB22_2:
+; NO_ISEL-NEXT:    addi 3, 3, -5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = sub i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_mul_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_mul_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    mulli 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_mul_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB23_1
+; NO_ISEL-NEXT:    b .LBB23_2
+; NO_ISEL-NEXT:  .LBB23_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB23_2:
+; NO_ISEL-NEXT:    mulli 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = mul i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_sdiv_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_sdiv_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    lis 5, 26214
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    ori 12, 5, 26215
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    mulld 3, 3, 12
+; ISEL-NEXT:    rldicl 4, 3, 1, 63
+; ISEL-NEXT:    sradi 3, 3, 33
+; ISEL-NEXT:    add 3, 3, 4
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_sdiv_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    lis 5, 26214
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    ori 12, 5, 26215
+; NO_ISEL-NEXT:    bc 12, 1, .LBB24_1
+; NO_ISEL-NEXT:    b .LBB24_2
+; NO_ISEL-NEXT:  .LBB24_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB24_2:
+; NO_ISEL-NEXT:    mulld 3, 3, 12
+; NO_ISEL-NEXT:    rldicl 4, 3, 1, 63
+; NO_ISEL-NEXT:    sradi 3, 3, 33
+; NO_ISEL-NEXT:    add 3, 3, 4
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = sdiv i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_udiv_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_udiv_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    lis 4, 16383
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 5, 0
+; ISEL-NEXT:    ori 3, 4, 65535
+; ISEL-NEXT:    li 4, 23
+; ISEL-NEXT:    oris 12, 5, 52428
+; ISEL-NEXT:    sldi 3, 3, 2
+; ISEL-NEXT:    isel 3, 3, 4, 1
+; ISEL-NEXT:    ori 4, 12, 52429
+; ISEL-NEXT:    clrldi 3, 3, 56
+; ISEL-NEXT:    mulld 3, 3, 4
+; ISEL-NEXT:    rldicl 3, 3, 30, 34
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_udiv_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    lis 4, 16383
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 5, 0
+; NO_ISEL-NEXT:    ori 3, 4, 65535
+; NO_ISEL-NEXT:    li 4, 23
+; NO_ISEL-NEXT:    oris 12, 5, 52428
+; NO_ISEL-NEXT:    sldi 3, 3, 2
+; NO_ISEL-NEXT:    bc 12, 1, .LBB25_2
+; NO_ISEL-NEXT:  # BB#1:
+; NO_ISEL-NEXT:    ori 3, 4, 0
+; NO_ISEL-NEXT:    b .LBB25_2
+; NO_ISEL-NEXT:  .LBB25_2:
+; NO_ISEL-NEXT:    ori 4, 12, 52429
+; NO_ISEL-NEXT:    clrldi 3, 3, 56
+; NO_ISEL-NEXT:    mulld 3, 3, 4
+; NO_ISEL-NEXT:    rldicl 3, 3, 30, 34
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = udiv i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_srem_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_srem_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    lis 12, 26214
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    ori 4, 12, 26215
+; ISEL-NEXT:    extsw 3, 3
+; ISEL-NEXT:    mulld 4, 3, 4
+; ISEL-NEXT:    rldicl 5, 4, 1, 63
+; ISEL-NEXT:    sradi 4, 4, 33
+; ISEL-NEXT:    add 4, 4, 5
+; ISEL-NEXT:    mulli 4, 4, 5
+; ISEL-NEXT:    subf 3, 4, 3
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_srem_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    lis 12, 26214
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB26_1
+; NO_ISEL-NEXT:    b .LBB26_2
+; NO_ISEL-NEXT:  .LBB26_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB26_2:
+; NO_ISEL-NEXT:    ori 4, 12, 26215
+; NO_ISEL-NEXT:    extsw 3, 3
+; NO_ISEL-NEXT:    mulld 4, 3, 4
+; NO_ISEL-NEXT:    rldicl 5, 4, 1, 63
+; NO_ISEL-NEXT:    sradi 4, 4, 33
+; NO_ISEL-NEXT:    add 4, 4, 5
+; NO_ISEL-NEXT:    mulli 4, 4, 5
+; NO_ISEL-NEXT:    subf 3, 4, 3
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = srem i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_urem_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_urem_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 12, 0
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    oris 4, 12, 52428
+; ISEL-NEXT:    rlwinm 3, 3, 0, 24, 31
+; ISEL-NEXT:    ori 4, 4, 52429
+; ISEL-NEXT:    clrldi 5, 3, 32
+; ISEL-NEXT:    mulld 4, 5, 4
+; ISEL-NEXT:    rldicl 4, 4, 30, 34
+; ISEL-NEXT:    mulli 4, 4, 5
+; ISEL-NEXT:    subf 3, 4, 3
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_urem_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 12, 0
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB27_1
+; NO_ISEL-NEXT:    b .LBB27_2
+; NO_ISEL-NEXT:  .LBB27_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB27_2:
+; NO_ISEL-NEXT:    oris 4, 12, 52428
+; NO_ISEL-NEXT:    rlwinm 3, 3, 0, 24, 31
+; NO_ISEL-NEXT:    ori 4, 4, 52429
+; NO_ISEL-NEXT:    clrldi 5, 3, 32
+; NO_ISEL-NEXT:    mulld 4, 5, 4
+; NO_ISEL-NEXT:    rldicl 4, 4, 30, 34
+; NO_ISEL-NEXT:    mulli 4, 4, 5
+; NO_ISEL-NEXT:    subf 3, 4, 3
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = urem i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_and_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_and_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    lis 4, 16383
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    ori 3, 4, 65535
+; ISEL-NEXT:    li 4, 23
+; ISEL-NEXT:    sldi 3, 3, 2
+; ISEL-NEXT:    isel 3, 3, 4, 1
+; ISEL-NEXT:    andi. 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_and_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    lis 4, 16383
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    ori 3, 4, 65535
+; NO_ISEL-NEXT:    li 4, 23
+; NO_ISEL-NEXT:    sldi 3, 3, 2
+; NO_ISEL-NEXT:    bc 12, 1, .LBB28_2
+; NO_ISEL-NEXT:  # BB#1:
+; NO_ISEL-NEXT:    ori 3, 4, 0
+; NO_ISEL-NEXT:    b .LBB28_2
+; NO_ISEL-NEXT:  .LBB28_2:
+; NO_ISEL-NEXT:    andi. 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = and i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_or_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_or_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    lis 4, 16383
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    ori 3, 4, 65535
+; ISEL-NEXT:    li 4, 23
+; ISEL-NEXT:    sldi 3, 3, 2
+; ISEL-NEXT:    isel 3, 3, 4, 1
+; ISEL-NEXT:    ori 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_or_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    lis 4, 16383
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    ori 3, 4, 65535
+; NO_ISEL-NEXT:    li 4, 23
+; NO_ISEL-NEXT:    sldi 3, 3, 2
+; NO_ISEL-NEXT:    bc 12, 1, .LBB29_2
+; NO_ISEL-NEXT:  # BB#1:
+; NO_ISEL-NEXT:    ori 3, 4, 0
+; NO_ISEL-NEXT:    b .LBB29_2
+; NO_ISEL-NEXT:  .LBB29_2:
+; NO_ISEL-NEXT:    ori 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = or i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_xor_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_xor_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    lis 4, 16383
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    ori 3, 4, 65535
+; ISEL-NEXT:    li 4, 23
+; ISEL-NEXT:    sldi 3, 3, 2
+; ISEL-NEXT:    isel 3, 3, 4, 1
+; ISEL-NEXT:    xori 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_xor_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    lis 4, 16383
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    ori 3, 4, 65535
+; NO_ISEL-NEXT:    li 4, 23
+; NO_ISEL-NEXT:    sldi 3, 3, 2
+; NO_ISEL-NEXT:    bc 12, 1, .LBB30_2
+; NO_ISEL-NEXT:  # BB#1:
+; NO_ISEL-NEXT:    ori 3, 4, 0
+; NO_ISEL-NEXT:    b .LBB30_2
+; NO_ISEL-NEXT:  .LBB30_2:
+; NO_ISEL-NEXT:    xori 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = xor i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_shl_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_shl_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    slwi 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_shl_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB31_1
+; NO_ISEL-NEXT:    b .LBB31_2
+; NO_ISEL-NEXT:  .LBB31_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB31_2:
+; NO_ISEL-NEXT:    slwi 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = shl i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_lshr_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_lshr_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    rlwinm 3, 3, 27, 29, 31
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_lshr_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB32_1
+; NO_ISEL-NEXT:    b .LBB32_2
+; NO_ISEL-NEXT:  .LBB32_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB32_2:
+; NO_ISEL-NEXT:    rlwinm 3, 3, 27, 29, 31
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = lshr i8 %sel, 5
+  ret i8 %bo
+}
+
+define i8 @sel_constants_ashr_constant(i1 %cond) {
+; ISEL-LABEL: sel_constants_ashr_constant:
+; ISEL:       # BB#0:
+; ISEL-NEXT:    andi. 3, 3, 1
+; ISEL-NEXT:    li 4, -4
+; ISEL-NEXT:    li 3, 23
+; ISEL-NEXT:    isel 3, 4, 3, 1
+; ISEL-NEXT:    srawi 3, 3, 5
+; ISEL-NEXT:    blr
+;
+; NO_ISEL-LABEL: sel_constants_ashr_constant:
+; NO_ISEL:       # BB#0:
+; NO_ISEL-NEXT:    andi. 3, 3, 1
+; NO_ISEL-NEXT:    li 4, -4
+; NO_ISEL-NEXT:    li 3, 23
+; NO_ISEL-NEXT:    bc 12, 1, .LBB33_1
+; NO_ISEL-NEXT:    b .LBB33_2
+; NO_ISEL-NEXT:  .LBB33_1:
+; NO_ISEL-NEXT:    addi 3, 4, 0
+; NO_ISEL-NEXT:  .LBB33_2:
+; NO_ISEL-NEXT:    srawi 3, 3, 5
+; NO_ISEL-NEXT:    blr
+  %sel = select i1 %cond, i8 -4, i8 23
+  %bo = ashr i8 %sel, 5
+  ret i8 %bo
+}
+
+define double @sel_constants_fadd_constant(i1 %cond) {
+; ALL-LABEL: sel_constants_fadd_constant:
+; ALL:       # BB#0:
+; ALL-NEXT:    andi. 3, 3, 1
+; ALL-NEXT:    bc 12, 1, .LBB34_2
+; ALL-NEXT:  # BB#1:
+; ALL-NEXT:    addis 3, 2, .LCPI34_0 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI34_0 at toc@l
+; ALL-NEXT:    lxsdx 0, 0, 3
+; ALL-NEXT:    b .LBB34_3
+; ALL-NEXT:  .LBB34_2:
+; ALL-NEXT:    addis 3, 2, .LCPI34_1 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI34_1 at toc@l
+; ALL-NEXT:    lxsspx 0, 0, 3
+; ALL-NEXT:  .LBB34_3:
+; ALL-NEXT:    addis 3, 2, .LCPI34_2 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI34_2 at toc@l
+; ALL-NEXT:    lxsdx 1, 0, 3
+; ALL-NEXT:    xsadddp 1, 0, 1
+; ALL-NEXT:    blr
+  %sel = select i1 %cond, double -4.0, double 23.3
+  %bo = fadd double %sel, 5.1
+  ret double %bo
+}
+
+define double @sel_constants_fsub_constant(i1 %cond) {
+; ALL-LABEL: sel_constants_fsub_constant:
+; ALL:       # BB#0:
+; ALL-NEXT:    andi. 3, 3, 1
+; ALL-NEXT:    bc 12, 1, .LBB35_2
+; ALL-NEXT:  # BB#1:
+; ALL-NEXT:    addis 3, 2, .LCPI35_0 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI35_0 at toc@l
+; ALL-NEXT:    lxsdx 0, 0, 3
+; ALL-NEXT:    b .LBB35_3
+; ALL-NEXT:  .LBB35_2:
+; ALL-NEXT:    addis 3, 2, .LCPI35_1 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI35_1 at toc@l
+; ALL-NEXT:    lxsspx 0, 0, 3
+; ALL-NEXT:  .LBB35_3:
+; ALL-NEXT:    addis 3, 2, .LCPI35_2 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI35_2 at toc@l
+; ALL-NEXT:    lxsdx 1, 0, 3
+; ALL-NEXT:    xsadddp 1, 0, 1
+; ALL-NEXT:    blr
+  %sel = select i1 %cond, double -4.0, double 23.3
+  %bo = fsub double %sel, 5.1
+  ret double %bo
+}
+
+define double @sel_constants_fmul_constant(i1 %cond) {
+; ALL-LABEL: sel_constants_fmul_constant:
+; ALL:       # BB#0:
+; ALL-NEXT:    andi. 3, 3, 1
+; ALL-NEXT:    bc 12, 1, .LBB36_2
+; ALL-NEXT:  # BB#1:
+; ALL-NEXT:    addis 3, 2, .LCPI36_0 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI36_0 at toc@l
+; ALL-NEXT:    lxsdx 0, 0, 3
+; ALL-NEXT:    b .LBB36_3
+; ALL-NEXT:  .LBB36_2:
+; ALL-NEXT:    addis 3, 2, .LCPI36_1 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI36_1 at toc@l
+; ALL-NEXT:    lxsspx 0, 0, 3
+; ALL-NEXT:  .LBB36_3:
+; ALL-NEXT:    addis 3, 2, .LCPI36_2 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI36_2 at toc@l
+; ALL-NEXT:    lxsdx 1, 0, 3
+; ALL-NEXT:    xsmuldp 1, 0, 1
+; ALL-NEXT:    blr
+  %sel = select i1 %cond, double -4.0, double 23.3
+  %bo = fmul double %sel, 5.1
+  ret double %bo
+}
+
+define double @sel_constants_fdiv_constant(i1 %cond) {
+; ALL-LABEL: sel_constants_fdiv_constant:
+; ALL:       # BB#0:
+; ALL-NEXT:    andi. 3, 3, 1
+; ALL-NEXT:    bc 12, 1, .LBB37_2
+; ALL-NEXT:  # BB#1:
+; ALL-NEXT:    addis 3, 2, .LCPI37_0 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI37_0 at toc@l
+; ALL-NEXT:    lxsdx 0, 0, 3
+; ALL-NEXT:    b .LBB37_3
+; ALL-NEXT:  .LBB37_2:
+; ALL-NEXT:    addis 3, 2, .LCPI37_1 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI37_1 at toc@l
+; ALL-NEXT:    lxsspx 0, 0, 3
+; ALL-NEXT:  .LBB37_3:
+; ALL-NEXT:    addis 3, 2, .LCPI37_2 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI37_2 at toc@l
+; ALL-NEXT:    lxsdx 1, 0, 3
+; ALL-NEXT:    xsdivdp 1, 0, 1
+; ALL-NEXT:    blr
+  %sel = select i1 %cond, double -4.0, double 23.3
+  %bo = fdiv double %sel, 5.1
+  ret double %bo
+}
+
+define double @sel_constants_frem_constant(i1 %cond) {
+; ALL-LABEL: sel_constants_frem_constant:
+; ALL:       # BB#0:
+; ALL-NEXT:    andi. 3, 3, 1
+; ALL-NEXT:    bc 12, 1, .LBB38_2
+; ALL-NEXT:  # BB#1:
+; ALL-NEXT:    addis 3, 2, .LCPI38_0 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI38_0 at toc@l
+; ALL-NEXT:    lxsdx 1, 0, 3
+; ALL-NEXT:    b .LBB38_3
+; ALL-NEXT:  .LBB38_2:
+; ALL-NEXT:    addis 3, 2, .LCPI38_1 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI38_1 at toc@l
+; ALL-NEXT:    lxsspx 1, 0, 3
+; ALL-NEXT:  .LBB38_3:
+; ALL-NEXT:    mflr 0
+; ALL-NEXT:    std 0, 16(1)
+; ALL-NEXT:    stdu 1, -96(1)
+; ALL-NEXT:  .Lcfi0:
+; ALL-NEXT:    .cfi_def_cfa_offset 96
+; ALL-NEXT:  .Lcfi1:
+; ALL-NEXT:    .cfi_offset lr, 16
+; ALL-NEXT:    addis 3, 2, .LCPI38_2 at toc@ha
+; ALL-NEXT:    addi 3, 3, .LCPI38_2 at toc@l
+; ALL-NEXT:    lxsdx 2, 0, 3
+; ALL-NEXT:    bl fmod
+; ALL-NEXT:    nop
+; ALL-NEXT:    addi 1, 1, 96
+; ALL-NEXT:    ld 0, 16(1)
+; ALL-NEXT:    mtlr 0
+; ALL-NEXT:    blr
+  %sel = select i1 %cond, double -4.0, double 23.3
+  %bo = frem double %sel, 5.1
+  ret double %bo
+}
+




More information about the llvm-commits mailing list