brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · e9ecfd1 Raw
324 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' < %s | FileCheck %s3 4target triple = "x86_64-unknown-linux-gnu"5 6define void @f1(i32 %a) {7; CHECK-LABEL: @f1(8; CHECK-NEXT:    [[FR:%.*]] = freeze i32 [[A:%.*]]9; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[FR]], 010; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]11; CHECK:       A:12; CHECK-NEXT:    call void @g1()13; CHECK-NEXT:    ret void14; CHECK:       B:15; CHECK-NEXT:    call void @g2()16; CHECK-NEXT:    ret void17;18  %c = icmp eq i32 %a, 019  %fr = freeze i1 %c20  br i1 %fr, label %A, label %B21A:22  call void @g1()23  ret void24B:25  call void @g2()26  ret void27}28 29define void @f2(i32 %a) {30; CHECK-LABEL: @f2(31; CHECK-NEXT:    [[FR:%.*]] = freeze i32 [[A:%.*]]32; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 0, [[FR]]33; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]34; CHECK:       A:35; CHECK-NEXT:    call void @g1()36; CHECK-NEXT:    ret void37; CHECK:       B:38; CHECK-NEXT:    call void @g2()39; CHECK-NEXT:    ret void40;41  %c = icmp eq i32 0, %a42  %fr = freeze i1 %c43  br i1 %fr, label %A, label %B44A:45  call void @g1()46  ret void47B:48  call void @g2()49  ret void50}51 52define void @f3(i32 %a) {53; CHECK-LABEL: @f3(54; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 0, 155; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]56; CHECK:       A:57; CHECK-NEXT:    call void @g1()58; CHECK-NEXT:    ret void59; CHECK:       B:60; CHECK-NEXT:    call void @g2()61; CHECK-NEXT:    ret void62;63  %c = icmp eq i32 0, 164  %fr = freeze i1 %c65  br i1 %fr, label %A, label %B66A:67  call void @g1()68  ret void69B:70  call void @g2()71  ret void72}73 74define i1 @ptrcmp(ptr %p) {75; CHECK-LABEL: @ptrcmp(76; CHECK-NEXT:    [[FR:%.*]] = freeze ptr [[P:%.*]]77; CHECK-NEXT:    [[C:%.*]] = icmp eq ptr [[FR]], null78; CHECK-NEXT:    ret i1 [[C]]79;80  %c = icmp eq ptr %p, null81  %fr = freeze i1 %c82  ret i1 %fr83}84 85 86define i1 @fcmp(float %a) {87; CHECK-LABEL: @fcmp(88; CHECK-NEXT:    [[FR:%.*]] = freeze float [[A:%.*]]89; CHECK-NEXT:    [[C:%.*]] = fcmp oeq float [[FR]], 0.000000e+0090; CHECK-NEXT:    ret i1 [[C]]91;92  %c = fcmp oeq float %a, 0.093  %fr = freeze i1 %c94  ret i1 %fr95}96 97define i1 @fcmp_nan(float %a) {98; CHECK-LABEL: @fcmp_nan(99; CHECK-NEXT:    [[C:%.*]] = fcmp nnan oeq float [[A:%.*]], 0.000000e+00100; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[C]]101; CHECK-NEXT:    ret i1 [[FR]]102;103  %c = fcmp nnan oeq float %a, 0.0104  %fr = freeze i1 %c105  ret i1 %fr106}107 108define void @and_bitmask(i32 %flag) {109; CHECK-LABEL: @and_bitmask(110; CHECK-NEXT:    [[V:%.*]] = and i32 [[FLAG:%.*]], 1111; CHECK-NEXT:    [[FR:%.*]] = freeze i32 [[V]]112; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[FR]], 0113; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]114; CHECK:       A:115; CHECK-NEXT:    call void @g1()116; CHECK-NEXT:    ret void117; CHECK:       B:118; CHECK-NEXT:    call void @g2()119; CHECK-NEXT:    ret void120;121  %v = and i32 %flag, 1122  %c = icmp eq i32 %v, 0123  %fr = freeze i1 %c124  br i1 %fr, label %A, label %B125A:126  call void @g1()127  ret void128B:129  call void @g2()130  ret void131}132 133define void @and_bitmask_r(i32 %flag) {134; CHECK-LABEL: @and_bitmask_r(135; CHECK-NEXT:    [[V:%.*]] = and i32 1, [[FLAG:%.*]]136; CHECK-NEXT:    [[FR:%.*]] = freeze i32 [[V]]137; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 0, [[FR]]138; CHECK-NEXT:    br i1 [[C]], label [[A:%.*]], label [[B:%.*]]139; CHECK:       A:140; CHECK-NEXT:    call void @g1()141; CHECK-NEXT:    ret void142; CHECK:       B:143; CHECK-NEXT:    call void @g2()144; CHECK-NEXT:    ret void145;146  %v = and i32 1, %flag147  %c = icmp eq i32 0, %v148  %fr = freeze i1 %c149  br i1 %fr, label %A, label %B150A:151  call void @g1()152  ret void153B:154  call void @g2()155  ret void156}157 158define void @and_bitmask2(i32 %flag, i32 %flag2) {159; CHECK-LABEL: @and_bitmask2(160; CHECK-NEXT:    [[V:%.*]] = and i32 [[FLAG:%.*]], 1161; CHECK-NEXT:    [[C:%.*]] = icmp eq i32 [[V]], 0162; CHECK-NEXT:    [[V2:%.*]] = and i32 [[FLAG2:%.*]], 2163; CHECK-NEXT:    [[C2:%.*]] = icmp eq i32 [[V2]], 0164; CHECK-NEXT:    [[COND:%.*]] = or i1 [[C]], [[C2]]165; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[COND]]166; CHECK-NEXT:    br i1 [[FR]], label [[A:%.*]], label [[B:%.*]]167; CHECK:       A:168; CHECK-NEXT:    call void @g1()169; CHECK-NEXT:    ret void170; CHECK:       B:171; CHECK-NEXT:    call void @g2()172; CHECK-NEXT:    ret void173;174  %v = and i32 %flag, 1175  %c = icmp eq i32 %v, 0176  %v2 = and i32 %flag2, 2177  %c2 = icmp eq i32 %v2, 0178  %cond = or i1 %c, %c2179  %fr = freeze i1 %cond180  br i1 %fr, label %A, label %B181A:182  call void @g1()183  ret void184B:185  call void @g2()186  ret void187}188 189define void @and(i1 %a, i1 %b, i1 %c) {190; CHECK-LABEL: @and(191; CHECK-NEXT:    [[COND:%.*]] = and i1 [[A:%.*]], [[B:%.*]]192; CHECK-NEXT:    [[COND2:%.*]] = and i1 [[C:%.*]], [[COND]]193; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[COND2]]194; CHECK-NEXT:    br i1 [[FR]], label [[A:%.*]], label [[B:%.*]]195; CHECK:       A:196; CHECK-NEXT:    call void @g1()197; CHECK-NEXT:    ret void198; CHECK:       B:199; CHECK-NEXT:    call void @g2()200; CHECK-NEXT:    ret void201;202  %cond = and i1 %a, %b203  %cond2 = and i1 %c, %cond204  %fr = freeze i1 %cond2205  br i1 %fr, label %A, label %B206A:207  call void @g1()208  ret void209B:210  call void @g2()211  ret void212}213 214define void @and_long(i1 %a, i1 %b, i1 %c, i1 %d, i1 %e, i1 %f, i1 %g) {215; CHECK-LABEL: @and_long(216; CHECK-NEXT:    [[COND:%.*]] = and i1 [[A:%.*]], [[B:%.*]]217; CHECK-NEXT:    [[COND2:%.*]] = and i1 [[C:%.*]], [[COND]]218; CHECK-NEXT:    [[COND3:%.*]] = and i1 [[D:%.*]], [[COND2]]219; CHECK-NEXT:    [[COND4:%.*]] = and i1 [[E:%.*]], [[COND3]]220; CHECK-NEXT:    [[COND5:%.*]] = and i1 [[F:%.*]], [[COND4]]221; CHECK-NEXT:    [[COND6:%.*]] = and i1 [[G:%.*]], [[COND5]]222; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[COND6]]223; CHECK-NEXT:    br i1 [[FR]], label [[A:%.*]], label [[B:%.*]]224; CHECK:       A:225; CHECK-NEXT:    call void @g1()226; CHECK-NEXT:    ret void227; CHECK:       B:228; CHECK-NEXT:    call void @g2()229; CHECK-NEXT:    ret void230;231  %cond = and i1 %a, %b232  %cond2 = and i1 %c, %cond233  %cond3 = and i1 %d, %cond2234  %cond4 = and i1 %e, %cond3235  %cond5 = and i1 %f, %cond4236  %cond6 = and i1 %g, %cond5237  %fr = freeze i1 %cond6238  br i1 %fr, label %A, label %B239A:240  call void @g1()241  ret void242B:243  call void @g2()244  ret void245}246 247define void @and_cmp(i32 %v, float %w, i32 %v2) {248; CHECK-LABEL: @and_cmp(249; CHECK-NEXT:    [[C1:%.*]] = icmp eq i32 [[V:%.*]], 0250; CHECK-NEXT:    [[C2:%.*]] = fcmp oeq float [[W:%.*]], 0.000000e+00251; CHECK-NEXT:    [[COND:%.*]] = and i1 [[C1]], [[C2]]252; CHECK-NEXT:    [[C3:%.*]] = icmp eq i32 [[V2:%.*]], 1253; CHECK-NEXT:    [[COND2:%.*]] = and i1 [[COND]], [[C3]]254; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[COND2]]255; CHECK-NEXT:    br i1 [[FR]], label [[A:%.*]], label [[B:%.*]]256; CHECK:       A:257; CHECK-NEXT:    call void @g1()258; CHECK-NEXT:    ret void259; CHECK:       B:260; CHECK-NEXT:    call void @g2()261; CHECK-NEXT:    ret void262;263  %c1 = icmp eq i32 %v, 0264  %c2 = fcmp oeq float %w, 0.0265  %cond = and i1 %c1, %c2266  %c3 = icmp eq i32 %v2, 1267  %cond2 = and i1 %cond, %c3268  %fr = freeze i1 %cond2269  br i1 %fr, label %A, label %B270A:271  call void @g1()272  ret void273B:274  call void @g2()275  ret void276}277 278define void @or(i1 %a, i1 %b, i1 %c) {279; CHECK-LABEL: @or(280; CHECK-NEXT:    [[COND:%.*]] = or i1 [[A:%.*]], [[B:%.*]]281; CHECK-NEXT:    [[COND2:%.*]] = or i1 [[C:%.*]], [[COND]]282; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[COND2]]283; CHECK-NEXT:    br i1 [[FR]], label [[A:%.*]], label [[B:%.*]]284; CHECK:       A:285; CHECK-NEXT:    call void @g1()286; CHECK-NEXT:    ret void287; CHECK:       B:288; CHECK-NEXT:    call void @g2()289; CHECK-NEXT:    ret void290;291  %cond = or i1 %a, %b292  %cond2 = or i1 %c, %cond293  %fr = freeze i1 %cond2294  br i1 %fr, label %A, label %B295A:296  call void @g1()297  ret void298B:299  call void @g2()300  ret void301}302 303define void @and_loop(i1 %a, i1 %b) {304; CHECK-LABEL: @and_loop(305; CHECK-NEXT:    ret void306; CHECK:       UNREACHABLE:307; CHECK-NEXT:    [[C:%.*]] = and i1 [[A:%.*]], [[C]]308; CHECK-NEXT:    [[FR:%.*]] = freeze i1 [[C]]309; CHECK-NEXT:    br i1 [[FR]], label [[UNREACHABLE:%.*]], label [[EXIT:%.*]]310; CHECK:       EXIT:311; CHECK-NEXT:    ret void312;313  ret void314UNREACHABLE:315  %c = and i1 %a, %c316  %fr = freeze i1 %c317  br i1 %fr, label %UNREACHABLE, label %EXIT318EXIT:319  ret void320}321 322declare void @g1()323declare void @g2()324