brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 3a1270a Raw
123 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S -o - | FileCheck %s3 4target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"5 6define float @func1(float %a, float %b, float %c, i1 %cond) {7; CHECK-LABEL: @func1(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    br i1 [[COND:%.*]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]10; CHECK:       cond.true:11; CHECK-NEXT:    br label [[COND_END:%.*]]12; CHECK:       cond.false:13; CHECK-NEXT:    br label [[COND_END]]14; CHECK:       cond.end:15; CHECK-NEXT:    [[B_PN:%.*]] = phi float [ [[B:%.*]], [[COND_TRUE]] ], [ [[C:%.*]], [[COND_FALSE]] ]16; CHECK-NEXT:    [[E:%.*]] = fsub fast float [[A:%.*]], [[B_PN]]17; CHECK-NEXT:    ret float [[E]]18;19entry:20  br i1 %cond, label %cond.true, label %cond.false21 22cond.true:23  %sub0 = fsub fast float %a, %b24  br label %cond.end25 26cond.false:27  %sub1 = fsub fast float %a, %c28  br label %cond.end29 30; The fast-math flags should always be transfered if possible.31cond.end:32  %e = phi float [ %sub0, %cond.true ], [ %sub1, %cond.false ]33  ret float %e34}35 36define float @func2(float %a, float %b, float %c, i1 %cond) {37; CHECK-LABEL: @func2(38; CHECK-NEXT:  entry:39; CHECK-NEXT:    br i1 [[COND:%.*]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]40; CHECK:       cond.true:41; CHECK-NEXT:    br label [[COND_END:%.*]]42; CHECK:       cond.false:43; CHECK-NEXT:    br label [[COND_END]]44; CHECK:       cond.end:45; CHECK-NEXT:    [[B_PN:%.*]] = phi float [ [[B:%.*]], [[COND_TRUE]] ], [ [[C:%.*]], [[COND_FALSE]] ]46; CHECK-NEXT:    [[E:%.*]] = fsub float [[A:%.*]], [[B_PN]]47; CHECK-NEXT:    ret float [[E]]48;49entry:50  br i1 %cond, label %cond.true, label %cond.false51 52cond.true:53  %sub0 = fsub fast float %a, %b54  br label %cond.end55 56cond.false:57  %sub1 = fsub float %a, %c58  br label %cond.end59 60; The fast-math flags should always be transfered if possible.61cond.end:62  %e = phi float [ %sub0, %cond.true ], [ %sub1, %cond.false ]63  ret float %e64}65 66define float @func3(float %a, float %b, float %c, i1 %cond) {67; CHECK-LABEL: @func3(68; CHECK-NEXT:  entry:69; CHECK-NEXT:    br i1 [[COND:%.*]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]70; CHECK:       cond.true:71; CHECK-NEXT:    br label [[COND_END:%.*]]72; CHECK:       cond.false:73; CHECK-NEXT:    br label [[COND_END]]74; CHECK:       cond.end:75; CHECK-NEXT:    [[E_IN:%.*]] = phi float [ [[A:%.*]], [[COND_TRUE]] ], [ [[B:%.*]], [[COND_FALSE]] ]76; CHECK-NEXT:    [[E:%.*]] = fadd fast float [[E_IN]], -2.000000e+0077; CHECK-NEXT:    ret float [[E]]78;79entry:80  br i1 %cond, label %cond.true, label %cond.false81 82cond.true:83  %sub0 = fsub fast float %a, 2.084  br label %cond.end85 86cond.false:87  %sub1 = fsub fast float %b, 2.088  br label %cond.end89 90cond.end:91  %e = phi float [ %sub0, %cond.true ], [ %sub1, %cond.false ]92  ret float %e93}94 95define float @func4(float %a, float %b, float %c, i1 %cond) {96; CHECK-LABEL: @func4(97; CHECK-NEXT:  entry:98; CHECK-NEXT:    br i1 [[COND:%.*]], label [[COND_TRUE:%.*]], label [[COND_FALSE:%.*]]99; CHECK:       cond.true:100; CHECK-NEXT:    br label [[COND_END:%.*]]101; CHECK:       cond.false:102; CHECK-NEXT:    br label [[COND_END]]103; CHECK:       cond.end:104; CHECK-NEXT:    [[E_IN:%.*]] = phi float [ [[A:%.*]], [[COND_TRUE]] ], [ [[B:%.*]], [[COND_FALSE]] ]105; CHECK-NEXT:    [[E:%.*]] = fadd float [[E_IN]], -2.000000e+00106; CHECK-NEXT:    ret float [[E]]107;108entry:109  br i1 %cond, label %cond.true, label %cond.false110 111cond.true:112  %sub0 = fsub fast float %a, 2.0113  br label %cond.end114 115cond.false:116  %sub1 = fsub float %b, 2.0117  br label %cond.end118 119cond.end:120  %e = phi float [ %sub0, %cond.true ], [ %sub1, %cond.false ]121  ret float %e122}123