brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.3 KiB · bffaf10 Raw
501 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; Test an already canonical branch to make sure we don't flip those.5define i32 @eq(i32 %X, i32 %Y) {6; CHECK-LABEL: @eq(7; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]8; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !09; CHECK:       T:10; CHECK-NEXT:    ret i32 1211; CHECK:       F:12; CHECK-NEXT:    ret i32 12313;14  %C = icmp eq i32 %X, %Y15  br i1 %C, label %T, label %F, !prof !016T:17  ret i32 1218F:19  ret i32 12320}21 22define i32 @ne(i32 %X, i32 %Y) {23; CHECK-LABEL: @ne(24; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[X:%.*]], [[Y:%.*]]25; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !126; CHECK:       T:27; CHECK-NEXT:    ret i32 1228; CHECK:       F:29; CHECK-NEXT:    ret i32 12330;31  %C = icmp ne i32 %X, %Y32  br i1 %C, label %T, label %F, !prof !133T:34  ret i32 1235F:36  ret i32 12337}38 39define i32 @ugt(i32 %X, i32 %Y) {40; CHECK-LABEL: @ugt(41; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]42; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !243; CHECK:       T:44; CHECK-NEXT:    ret i32 1245; CHECK:       F:46; CHECK-NEXT:    ret i32 12347;48  %C = icmp ugt i32 %X, %Y49  br i1 %C, label %T, label %F, !prof !250T:51  ret i32 1252F:53  ret i32 12354}55 56define i32 @uge(i32 %X, i32 %Y) {57; CHECK-LABEL: @uge(58; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[X:%.*]], [[Y:%.*]]59; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !360; CHECK:       T:61; CHECK-NEXT:    ret i32 1262; CHECK:       F:63; CHECK-NEXT:    ret i32 12364;65  %C = icmp uge i32 %X, %Y66  br i1 %C, label %T, label %F, !prof !367T:68  ret i32 1269F:70  ret i32 12371}72 73define i32 @ult(i32 %X, i32 %Y) {74; CHECK-LABEL: @ult(75; CHECK-NEXT:    [[C:%.*]] = icmp ult i32 [[X:%.*]], [[Y:%.*]]76; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !477; CHECK:       T:78; CHECK-NEXT:    ret i32 1279; CHECK:       F:80; CHECK-NEXT:    ret i32 12381;82  %C = icmp ult i32 %X, %Y83  br i1 %C, label %T, label %F, !prof !484T:85  ret i32 1286F:87  ret i32 12388}89 90define i32 @ule(i32 %X, i32 %Y) {91; CHECK-LABEL: @ule(92; CHECK-NEXT:    [[C:%.*]] = icmp ugt i32 [[X:%.*]], [[Y:%.*]]93; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !594; CHECK:       T:95; CHECK-NEXT:    ret i32 1296; CHECK:       F:97; CHECK-NEXT:    ret i32 12398;99  %C = icmp ule i32 %X, %Y100  br i1 %C, label %T, label %F, !prof !5101T:102  ret i32 12103F:104  ret i32 123105}106 107define i32 @sgt(i32 %X, i32 %Y) {108; CHECK-LABEL: @sgt(109; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]110; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !6111; CHECK:       T:112; CHECK-NEXT:    ret i32 12113; CHECK:       F:114; CHECK-NEXT:    ret i32 123115;116  %C = icmp sgt i32 %X, %Y117  br i1 %C, label %T, label %F, !prof !6118T:119  ret i32 12120F:121  ret i32 123122}123 124define i32 @sge(i32 %X, i32 %Y) {125; CHECK-LABEL: @sge(126; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]127; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !7128; CHECK:       T:129; CHECK-NEXT:    ret i32 12130; CHECK:       F:131; CHECK-NEXT:    ret i32 123132;133  %C = icmp sge i32 %X, %Y134  br i1 %C, label %T, label %F, !prof !7135T:136  ret i32 12137F:138  ret i32 123139}140 141define i32 @slt(i32 %X, i32 %Y) {142; CHECK-LABEL: @slt(143; CHECK-NEXT:    [[C:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]144; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !8145; CHECK:       T:146; CHECK-NEXT:    ret i32 12147; CHECK:       F:148; CHECK-NEXT:    ret i32 123149;150  %C = icmp slt i32 %X, %Y151  br i1 %C, label %T, label %F, !prof !8152T:153  ret i32 12154F:155  ret i32 123156}157 158define i32 @sle(i32 %X, i32 %Y) {159; CHECK-LABEL: @sle(160; CHECK-NEXT:    [[C:%.*]] = icmp sgt i32 [[X:%.*]], [[Y:%.*]]161; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !9162; CHECK:       T:163; CHECK-NEXT:    ret i32 12164; CHECK:       F:165; CHECK-NEXT:    ret i32 123166;167  %C = icmp sle i32 %X, %Y168  br i1 %C, label %T, label %F, !prof !9169T:170  ret i32 12171F:172  ret i32 123173}174 175define i32 @f_false(float %X, float %Y) {176; CHECK-LABEL: @f_false(177; CHECK-NEXT:    br i1 false, label [[T:%.*]], label [[F:%.*]], !prof !10178; CHECK:       T:179; CHECK-NEXT:    ret i32 12180; CHECK:       F:181; CHECK-NEXT:    ret i32 123182;183  %C = fcmp false float %X, %Y184  br i1 %C, label %T, label %F, !prof !10185T:186  ret i32 12187F:188  ret i32 123189}190 191define i32 @f_oeq(float %X, float %Y) {192; CHECK-LABEL: @f_oeq(193; CHECK-NEXT:    [[C:%.*]] = fcmp oeq float [[X:%.*]], [[Y:%.*]]194; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !11195; CHECK:       T:196; CHECK-NEXT:    ret i32 12197; CHECK:       F:198; CHECK-NEXT:    ret i32 123199;200  %C = fcmp oeq float %X, %Y201  br i1 %C, label %T, label %F, !prof !11202T:203  ret i32 12204F:205  ret i32 123206}207 208define i32 @f_ogt(float %X, float %Y) {209; CHECK-LABEL: @f_ogt(210; CHECK-NEXT:    [[C:%.*]] = fcmp ogt float [[X:%.*]], [[Y:%.*]]211; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !12212; CHECK:       T:213; CHECK-NEXT:    ret i32 12214; CHECK:       F:215; CHECK-NEXT:    ret i32 123216;217  %C = fcmp ogt float %X, %Y218  br i1 %C, label %T, label %F, !prof !12219T:220  ret i32 12221F:222  ret i32 123223}224 225define i32 @f_oge(float %X, float %Y) {226; CHECK-LABEL: @f_oge(227; CHECK-NEXT:    [[C:%.*]] = fcmp ult float [[X:%.*]], [[Y:%.*]]228; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !13229; CHECK:       T:230; CHECK-NEXT:    ret i32 12231; CHECK:       F:232; CHECK-NEXT:    ret i32 123233;234  %C = fcmp oge float %X, %Y235  br i1 %C, label %T, label %F, !prof !13236T:237  ret i32 12238F:239  ret i32 123240}241 242define i32 @f_olt(float %X, float %Y) {243; CHECK-LABEL: @f_olt(244; CHECK-NEXT:    [[C:%.*]] = fcmp olt float [[X:%.*]], [[Y:%.*]]245; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !14246; CHECK:       T:247; CHECK-NEXT:    ret i32 12248; CHECK:       F:249; CHECK-NEXT:    ret i32 123250;251  %C = fcmp olt float %X, %Y252  br i1 %C, label %T, label %F, !prof !14253T:254  ret i32 12255F:256  ret i32 123257}258 259define i32 @f_ole(float %X, float %Y) {260; CHECK-LABEL: @f_ole(261; CHECK-NEXT:    [[C:%.*]] = fcmp ugt float [[X:%.*]], [[Y:%.*]]262; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !15263; CHECK:       T:264; CHECK-NEXT:    ret i32 12265; CHECK:       F:266; CHECK-NEXT:    ret i32 123267;268  %C = fcmp ole float %X, %Y269  br i1 %C, label %T, label %F, !prof !15270T:271  ret i32 12272F:273  ret i32 123274}275 276define i32 @f_one(float %X, float %Y) {277; CHECK-LABEL: @f_one(278; CHECK-NEXT:    [[C:%.*]] = fcmp ueq float [[X:%.*]], [[Y:%.*]]279; CHECK-NEXT:    br i1 [[C]], label [[F:%.*]], label [[T:%.*]], !prof !16280; CHECK:       T:281; CHECK-NEXT:    ret i32 12282; CHECK:       F:283; CHECK-NEXT:    ret i32 123284;285  %C = fcmp one float %X, %Y286  br i1 %C, label %T, label %F, !prof !16287T:288  ret i32 12289F:290  ret i32 123291}292 293define i32 @f_ord(float %X, float %Y) {294; CHECK-LABEL: @f_ord(295; CHECK-NEXT:    [[C:%.*]] = fcmp ord float [[X:%.*]], [[Y:%.*]]296; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !17297; CHECK:       T:298; CHECK-NEXT:    ret i32 12299; CHECK:       F:300; CHECK-NEXT:    ret i32 123301;302  %C = fcmp ord float %X, %Y303  br i1 %C, label %T, label %F, !prof !17304T:305  ret i32 12306F:307  ret i32 123308}309 310define i32 @f_uno(float %X, float %Y) {311; CHECK-LABEL: @f_uno(312; CHECK-NEXT:    [[C:%.*]] = fcmp uno float [[X:%.*]], [[Y:%.*]]313; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !18314; CHECK:       T:315; CHECK-NEXT:    ret i32 12316; CHECK:       F:317; CHECK-NEXT:    ret i32 123318;319  %C = fcmp uno float %X, %Y320  br i1 %C, label %T, label %F, !prof !18321T:322  ret i32 12323F:324  ret i32 123325}326 327define i32 @f_ueq(float %X, float %Y) {328; CHECK-LABEL: @f_ueq(329; CHECK-NEXT:    [[C:%.*]] = fcmp ueq float [[X:%.*]], [[Y:%.*]]330; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !19331; CHECK:       T:332; CHECK-NEXT:    ret i32 12333; CHECK:       F:334; CHECK-NEXT:    ret i32 123335;336  %C = fcmp ueq float %X, %Y337  br i1 %C, label %T, label %F, !prof !19338T:339  ret i32 12340F:341  ret i32 123342}343 344define i32 @f_ugt(float %X, float %Y) {345; CHECK-LABEL: @f_ugt(346; CHECK-NEXT:    [[C:%.*]] = fcmp ugt float [[X:%.*]], [[Y:%.*]]347; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !20348; CHECK:       T:349; CHECK-NEXT:    ret i32 12350; CHECK:       F:351; CHECK-NEXT:    ret i32 123352;353  %C = fcmp ugt float %X, %Y354  br i1 %C, label %T, label %F, !prof !20355T:356  ret i32 12357F:358  ret i32 123359}360 361define i32 @f_uge(float %X, float %Y) {362; CHECK-LABEL: @f_uge(363; CHECK-NEXT:    [[C:%.*]] = fcmp uge float [[X:%.*]], [[Y:%.*]]364; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !21365; CHECK:       T:366; CHECK-NEXT:    ret i32 12367; CHECK:       F:368; CHECK-NEXT:    ret i32 123369;370  %C = fcmp uge float %X, %Y371  br i1 %C, label %T, label %F, !prof !21372T:373  ret i32 12374F:375  ret i32 123376}377 378define i32 @f_ult(float %X, float %Y) {379; CHECK-LABEL: @f_ult(380; CHECK-NEXT:    [[C:%.*]] = fcmp ult float [[X:%.*]], [[Y:%.*]]381; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !22382; CHECK:       T:383; CHECK-NEXT:    ret i32 12384; CHECK:       F:385; CHECK-NEXT:    ret i32 123386;387  %C = fcmp ult float %X, %Y388  br i1 %C, label %T, label %F, !prof !22389T:390  ret i32 12391F:392  ret i32 123393}394 395define i32 @f_ule(float %X, float %Y) {396; CHECK-LABEL: @f_ule(397; CHECK-NEXT:    [[C:%.*]] = fcmp ule float [[X:%.*]], [[Y:%.*]]398; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !23399; CHECK:       T:400; CHECK-NEXT:    ret i32 12401; CHECK:       F:402; CHECK-NEXT:    ret i32 123403;404  %C = fcmp ule float %X, %Y405  br i1 %C, label %T, label %F, !prof !23406T:407  ret i32 12408F:409  ret i32 123410}411 412define i32 @f_une(float %X, float %Y) {413; CHECK-LABEL: @f_une(414; CHECK-NEXT:    [[C:%.*]] = fcmp une float [[X:%.*]], [[Y:%.*]]415; CHECK-NEXT:    br i1 [[C]], label [[T:%.*]], label [[F:%.*]], !prof !24416; CHECK:       T:417; CHECK-NEXT:    ret i32 12418; CHECK:       F:419; CHECK-NEXT:    ret i32 123420;421  %C = fcmp une float %X, %Y422  br i1 %C, label %T, label %F, !prof !24423T:424  ret i32 12425F:426  ret i32 123427}428 429define i32 @f_true(float %X, float %Y) {430; CHECK-LABEL: @f_true(431; CHECK-NEXT:    br i1 true, label [[T:%.*]], label [[F:%.*]], !prof !25432; CHECK:       T:433; CHECK-NEXT:    ret i32 12434; CHECK:       F:435; CHECK-NEXT:    ret i32 123436;437  %C = fcmp true float %X, %Y438  br i1 %C, label %T, label %F, !prof !25439T:440  ret i32 12441F:442  ret i32 123443}444 445 446!0  = !{!"branch_weights", i32 0,  i32 99}447!1  = !{!"branch_weights", i32 1,  i32 99}448!2  = !{!"branch_weights", i32 2,  i32 99}449!3  = !{!"branch_weights", i32 3,  i32 99}450!4  = !{!"branch_weights", i32 4,  i32 99}451!5  = !{!"branch_weights", i32 5,  i32 99}452!6  = !{!"branch_weights", i32 6,  i32 99}453!7  = !{!"branch_weights", i32 7,  i32 99}454!8  = !{!"branch_weights", i32 8,  i32 99}455!9  = !{!"branch_weights", i32 9,  i32 99}456!10 = !{!"branch_weights", i32 10, i32 99}457!11 = !{!"branch_weights", i32 11, i32 99}458!12 = !{!"branch_weights", i32 12, i32 99}459!13 = !{!"branch_weights", i32 13, i32 99}460!14 = !{!"branch_weights", i32 14, i32 99}461!15 = !{!"branch_weights", i32 15, i32 99}462!16 = !{!"branch_weights", i32 16, i32 99}463!17 = !{!"branch_weights", i32 17, i32 99}464!18 = !{!"branch_weights", i32 18, i32 99}465!19 = !{!"branch_weights", i32 19, i32 99}466!20 = !{!"branch_weights", i32 20, i32 99}467!21 = !{!"branch_weights", i32 21, i32 99}468!22 = !{!"branch_weights", i32 22, i32 99}469!23 = !{!"branch_weights", i32 23, i32 99}470!24 = !{!"branch_weights", i32 24, i32 99}471!25 = !{!"branch_weights", i32 25, i32 99}472 473; Ensure that the branch metadata is reversed to match the reversals above.474; CHECK: !0 = {{.*}} i32 0, i32 99}475; CHECK: !1 = {{.*}} i32 99, i32 1}476; CHECK: !2 = {{.*}} i32 2, i32 99}477; CHECK: !3 = {{.*}} i32 99, i32 3}478; CHECK: !4 = {{.*}} i32 4, i32 99}479; CHECK: !5 = {{.*}} i32 99, i32 5}480; CHECK: !6 = {{.*}} i32 6, i32 99}481; CHECK: !7 = {{.*}} i32 99, i32 7}482; CHECK: !8 = {{.*}} i32 8, i32 99}483; CHECK: !9 = {{.*}} i32 99, i32 9}484; CHECK: !10 = {{.*}} i32 10, i32 99}485; CHECK: !11 = {{.*}} i32 11, i32 99}486; CHECK: !12 = {{.*}} i32 12, i32 99}487; CHECK: !13 = {{.*}} i32 99, i32 13}488; CHECK: !14 = {{.*}} i32 14, i32 99}489; CHECK: !15 = {{.*}} i32 99, i32 15}490; CHECK: !16 = {{.*}} i32 99, i32 16}491; CHECK: !17 = {{.*}} i32 17, i32 99}492; CHECK: !18 = {{.*}} i32 18, i32 99}493; CHECK: !19 = {{.*}} i32 19, i32 99}494; CHECK: !20 = {{.*}} i32 20, i32 99}495; CHECK: !21 = {{.*}} i32 21, i32 99}496; CHECK: !22 = {{.*}} i32 22, i32 99}497; CHECK: !23 = {{.*}} i32 23, i32 99}498; CHECK: !24 = {{.*}} i32 24, i32 99}499; CHECK: !25 = {{.*}} i32 25, i32 99}500 501