brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.5 KiB · 88f517a Raw
188 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=arm64 | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc < %s -mtriple=aarch64 -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5; This test provides fmf coverage for DAG combining of selects6 7; select Cond0, (select Cond1, X, Y), Y -> select (and Cond0, Cond1), X, Y8define float @select_select_fold_select_and(float %w, float %x, float %y, float %z) {9; CHECK-SD-LABEL: select_select_fold_select_and:10; CHECK-SD:       // %bb.0:11; CHECK-SD-NEXT:    fminnm s4, s1, s212; CHECK-SD-NEXT:    fcmp s1, s213; CHECK-SD-NEXT:    fmaxnm s2, s0, s314; CHECK-SD-NEXT:    fmov s1, #0.5000000015; CHECK-SD-NEXT:    fccmp s4, s0, #4, lt16; CHECK-SD-NEXT:    fadd s1, s0, s117; CHECK-SD-NEXT:    fcsel s2, s2, s0, gt18; CHECK-SD-NEXT:    fadd s4, s1, s219; CHECK-SD-NEXT:    fcmp s4, s120; CHECK-SD-NEXT:    b.le .LBB0_221; CHECK-SD-NEXT:  // %bb.1: // %if.then.i157.i.i22; CHECK-SD-NEXT:    fmov s0, #1.0000000023; CHECK-SD-NEXT:    fadd s0, s2, s024; CHECK-SD-NEXT:    ret25; CHECK-SD-NEXT:  .LBB0_2: // %if.end.i159.i.i26; CHECK-SD-NEXT:    mov w8, #52429 // =0xcccd27; CHECK-SD-NEXT:    mov w9, #13107 // =0x333328; CHECK-SD-NEXT:    fcmp s1, #0.029; CHECK-SD-NEXT:    movk w8, #48844, lsl #1630; CHECK-SD-NEXT:    movk w9, #48819, lsl #1631; CHECK-SD-NEXT:    fmov s2, w832; CHECK-SD-NEXT:    fmov s4, w933; CHECK-SD-NEXT:    fadd s0, s0, s234; CHECK-SD-NEXT:    fadd s2, s3, s435; CHECK-SD-NEXT:    fcsel s0, s0, s2, gt36; CHECK-SD-NEXT:    ret37;38; CHECK-GI-LABEL: select_select_fold_select_and:39; CHECK-GI:       // %bb.0:40; CHECK-GI-NEXT:    fcmp s1, s241; CHECK-GI-NEXT:    fcsel s4, s1, s2, mi42; CHECK-GI-NEXT:    fcmp s0, s343; CHECK-GI-NEXT:    fcsel s5, s0, s3, gt44; CHECK-GI-NEXT:    fcmp s1, s245; CHECK-GI-NEXT:    fmov s1, #0.5000000046; CHECK-GI-NEXT:    fcsel s2, s5, s0, mi47; CHECK-GI-NEXT:    fcmp s4, s048; CHECK-GI-NEXT:    fadd s1, s0, s149; CHECK-GI-NEXT:    fcsel s2, s2, s0, gt50; CHECK-GI-NEXT:    fadd s4, s1, s251; CHECK-GI-NEXT:    fcmp s4, s152; CHECK-GI-NEXT:    b.le .LBB0_253; CHECK-GI-NEXT:  // %bb.1: // %if.then.i157.i.i54; CHECK-GI-NEXT:    fmov s0, #1.0000000055; CHECK-GI-NEXT:    fadd s0, s2, s056; CHECK-GI-NEXT:    ret57; CHECK-GI-NEXT:  .LBB0_2: // %if.end.i159.i.i58; CHECK-GI-NEXT:    mov w8, #52429 // =0xcccd59; CHECK-GI-NEXT:    mov w9, #13107 // =0x333360; CHECK-GI-NEXT:    fcmp s1, #0.061; CHECK-GI-NEXT:    movk w8, #48844, lsl #1662; CHECK-GI-NEXT:    movk w9, #48819, lsl #1663; CHECK-GI-NEXT:    fmov s2, w864; CHECK-GI-NEXT:    fmov s4, w965; CHECK-GI-NEXT:    fadd s0, s0, s266; CHECK-GI-NEXT:    fadd s2, s3, s467; CHECK-GI-NEXT:    fcsel s0, s0, s2, gt68; CHECK-GI-NEXT:    ret69  %tmp21 = fcmp fast olt float %x, %y70  %tmp22 = select fast i1 %tmp21, float %x, float %y71  %tmp24 = fcmp fast ogt float %tmp22, %w72  %tmp78 = fcmp fast ogt float %w, %z73  %select0 = select fast i1 %tmp78, float %w, float %z74  %select1 = select fast i1 %tmp21, float %select0, float %w75  %select2 = select fast i1 %tmp24, float %select1, float %w76  %tmp82 = fadd fast float %w, 5.000000e-0177  %tmp102 = fadd fast float %tmp82, %select278  %cmp.i155.i.i = fcmp fast ogt float %tmp102, %tmp8279  br i1 %cmp.i155.i.i, label %if.then.i157.i.i, label %if.end.i159.i.i80 81if.then.i157.i.i:                                 ; preds = %082  %add.i156.i.i = fadd fast float %select2, 1.000000e+0083  br label %exit84 85if.end.i159.i.i:                                  ; preds = %086  %sub.i158.i.i = fadd fast float %w, 0xBFD99999A000000087  %sub15.i.i.i = fadd fast float %z, 0xBFD666666000000088  %tmp191 = fcmp fast ogt float %tmp82, 0.000000e+0089  %select3 = select fast i1 %tmp191, float %sub.i158.i.i, float %sub15.i.i.i90  br label %exit91 92exit:                                     ; preds = %if.end.i159.i.i, %if.then.i157.i.i93  %phi1 = phi float [ %add.i156.i.i, %if.then.i157.i.i ], [ %select3, %if.end.i159.i.i ]94  ret float %phi195}96 97; select Cond0, X, (select Cond1, X, Y) -> select (or Cond0, Cond1), X, Y98define float @select_select_fold_select_or(float %w, float %x, float %y, float %z) {99; CHECK-SD-LABEL: select_select_fold_select_or:100; CHECK-SD:       // %bb.0:101; CHECK-SD-NEXT:    fminnm s4, s1, s2102; CHECK-SD-NEXT:    fcmp s1, s2103; CHECK-SD-NEXT:    fmaxnm s2, s0, s3104; CHECK-SD-NEXT:    fmov s1, #0.50000000105; CHECK-SD-NEXT:    fccmp s4, s0, #0, ge106; CHECK-SD-NEXT:    fadd s1, s0, s1107; CHECK-SD-NEXT:    fcsel s2, s0, s2, gt108; CHECK-SD-NEXT:    fadd s4, s1, s2109; CHECK-SD-NEXT:    fcmp s4, s1110; CHECK-SD-NEXT:    b.le .LBB1_2111; CHECK-SD-NEXT:  // %bb.1: // %if.then.i157.i.i112; CHECK-SD-NEXT:    fmov s0, #1.00000000113; CHECK-SD-NEXT:    fadd s0, s2, s0114; CHECK-SD-NEXT:    ret115; CHECK-SD-NEXT:  .LBB1_2: // %if.end.i159.i.i116; CHECK-SD-NEXT:    mov w8, #52429 // =0xcccd117; CHECK-SD-NEXT:    mov w9, #13107 // =0x3333118; CHECK-SD-NEXT:    fcmp s1, #0.0119; CHECK-SD-NEXT:    movk w8, #48844, lsl #16120; CHECK-SD-NEXT:    movk w9, #48819, lsl #16121; CHECK-SD-NEXT:    fmov s2, w8122; CHECK-SD-NEXT:    fmov s4, w9123; CHECK-SD-NEXT:    fadd s0, s0, s2124; CHECK-SD-NEXT:    fadd s2, s3, s4125; CHECK-SD-NEXT:    fcsel s0, s0, s2, gt126; CHECK-SD-NEXT:    ret127;128; CHECK-GI-LABEL: select_select_fold_select_or:129; CHECK-GI:       // %bb.0:130; CHECK-GI-NEXT:    fcmp s1, s2131; CHECK-GI-NEXT:    fcsel s4, s1, s2, mi132; CHECK-GI-NEXT:    fcmp s0, s3133; CHECK-GI-NEXT:    fcsel s5, s0, s3, gt134; CHECK-GI-NEXT:    fcmp s1, s2135; CHECK-GI-NEXT:    fmov s1, #0.50000000136; CHECK-GI-NEXT:    fcsel s2, s0, s5, mi137; CHECK-GI-NEXT:    fcmp s4, s0138; CHECK-GI-NEXT:    fadd s1, s0, s1139; CHECK-GI-NEXT:    fcsel s2, s0, s2, gt140; CHECK-GI-NEXT:    fadd s4, s1, s2141; CHECK-GI-NEXT:    fcmp s4, s1142; CHECK-GI-NEXT:    b.le .LBB1_2143; CHECK-GI-NEXT:  // %bb.1: // %if.then.i157.i.i144; CHECK-GI-NEXT:    fmov s0, #1.00000000145; CHECK-GI-NEXT:    fadd s0, s2, s0146; CHECK-GI-NEXT:    ret147; CHECK-GI-NEXT:  .LBB1_2: // %if.end.i159.i.i148; CHECK-GI-NEXT:    mov w8, #52429 // =0xcccd149; CHECK-GI-NEXT:    mov w9, #13107 // =0x3333150; CHECK-GI-NEXT:    fcmp s1, #0.0151; CHECK-GI-NEXT:    movk w8, #48844, lsl #16152; CHECK-GI-NEXT:    movk w9, #48819, lsl #16153; CHECK-GI-NEXT:    fmov s2, w8154; CHECK-GI-NEXT:    fmov s4, w9155; CHECK-GI-NEXT:    fadd s0, s0, s2156; CHECK-GI-NEXT:    fadd s2, s3, s4157; CHECK-GI-NEXT:    fcsel s0, s0, s2, gt158; CHECK-GI-NEXT:    ret159  %tmp21 = fcmp fast olt float %x, %y160  %tmp22 = select fast i1 %tmp21, float %x, float %y161  %tmp24 = fcmp fast ogt float %tmp22, %w162  %tmp78 = fcmp fast ogt float %w, %z163  %select0 = select fast i1 %tmp78, float %w, float %z164  %select1 = select fast i1 %tmp21, float %w, float %select0165  %select2 = select fast i1 %tmp24, float %w, float %select1166  %tmp82 = fadd fast float %w, 5.000000e-01167  %tmp102 = fadd fast float %tmp82, %select2168  %cmp.i155.i.i = fcmp fast ogt float %tmp102, %tmp82169  br i1 %cmp.i155.i.i, label %if.then.i157.i.i, label %if.end.i159.i.i170 171if.then.i157.i.i:                                 ; preds = %0172  %add.i156.i.i = fadd fast float %select2, 1.000000e+00173  br label %exit174 175if.end.i159.i.i:                                  ; preds = %0176  %sub.i158.i.i = fadd fast float %w, 0xBFD99999A0000000177  %sub15.i.i.i = fadd fast float %z, 0xBFD6666660000000178  %tmp191 = fcmp fast ogt float %tmp82, 0.000000e+00179  %select3 = select fast i1 %tmp191, float %sub.i158.i.i, float %sub15.i.i.i180  br label %exit181 182exit:                                     ; preds = %if.end.i159.i.i, %if.then.i157.i.i183  %phi1 = phi float [ %add.i156.i.i, %if.then.i157.i.i ], [ %select3, %if.end.i159.i.i ]184  ret float %phi1185}186;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:187; CHECK: {{.*}}188