brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.3 KiB · 5e68c5c Raw
256 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes='loop(simple-loop-unswitch)' -S %s | FileCheck %s3 4declare void @some_func()5 6define i32 @need_freeze_of_individual_or_conditions1(i1 %cond1, i1 %cond2, i1 %cond3, i1 %cond4) {7; CHECK-LABEL: @need_freeze_of_individual_or_conditions1(8; CHECK-NEXT:  entry:9; CHECK-NEXT:    [[COND4_FR:%.*]] = freeze i1 [[COND4:%.*]]10; CHECK-NEXT:    [[COND1_FR:%.*]] = freeze i1 [[COND1:%.*]]11; CHECK-NEXT:    [[TMP0:%.*]] = and i1 [[COND4_FR]], [[COND1_FR]]12; CHECK-NEXT:    br i1 [[TMP0]], label [[ENTRY_SPLIT:%.*]], label [[EXIT_SPLIT:%.*]]13; CHECK:       entry.split:14; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]15; CHECK:       loop.header:16; CHECK-NEXT:    [[OR:%.*]] = or i1 [[COND2:%.*]], [[COND3:%.*]]17; CHECK-NEXT:    [[AND1:%.*]] = and i1 [[OR]], true18; CHECK-NEXT:    [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 false19; CHECK-NEXT:    br i1 [[AND2]], label [[LOOP_LATCH:%.*]], label [[EXIT:%.*]]20; CHECK:       loop.latch:21; CHECK-NEXT:    call void @some_func()22; CHECK-NEXT:    br label [[LOOP_HEADER]]23; CHECK:       exit:24; CHECK-NEXT:    br label [[EXIT_SPLIT]]25; CHECK:       exit.split:26; CHECK-NEXT:    ret i32 027;28entry:29  br label %loop.header30 31loop.header:32  %or = or i1 %cond2, %cond333  %and1 = and i1 %or, %cond134  %and2 = select i1 %and1, i1 %cond4, i1 false35  br i1 %and2, label %loop.latch, label %exit36 37loop.latch:38  call void @some_func()39  br label %loop.header40 41exit:42  ret i32 043}44 45define i32 @need_freeze_of_individual_or_conditions2(i1 noundef %cond1, i1 %cond2, i1 %cond3, i1 %cond4) {46; CHECK-LABEL: @need_freeze_of_individual_or_conditions2(47; CHECK-NEXT:  entry:48; CHECK-NEXT:    [[COND4_FR:%.*]] = freeze i1 [[COND4:%.*]]49; CHECK-NEXT:    [[TMP0:%.*]] = and i1 [[COND4_FR]], [[COND1:%.*]]50; CHECK-NEXT:    br i1 [[TMP0]], label [[ENTRY_SPLIT:%.*]], label [[EXIT_SPLIT:%.*]]51; CHECK:       entry.split:52; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]53; CHECK:       loop.header:54; CHECK-NEXT:    [[OR:%.*]] = or i1 [[COND2:%.*]], [[COND3:%.*]]55; CHECK-NEXT:    [[AND1:%.*]] = and i1 [[OR]], true56; CHECK-NEXT:    [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 false57; CHECK-NEXT:    br i1 [[AND2]], label [[LOOP_LATCH:%.*]], label [[EXIT:%.*]]58; CHECK:       loop.latch:59; CHECK-NEXT:    call void @some_func()60; CHECK-NEXT:    br label [[LOOP_HEADER]]61; CHECK:       exit:62; CHECK-NEXT:    br label [[EXIT_SPLIT]]63; CHECK:       exit.split:64; CHECK-NEXT:    ret i32 065;66entry:67  br label %loop.header68 69loop.header:70  %or = or i1 %cond2, %cond371  %and1 = and i1 %or, %cond172  %and2 = select i1 %and1, i1 %cond4, i1 false73  br i1 %and2, label %loop.latch, label %exit74 75loop.latch:76  call void @some_func()77  br label %loop.header78 79exit:80  ret i32 081}82 83define i32 @need_freeze_of_individual_or_conditions3(i1 %cond1, i1 %cond2, i1 %cond3, i1 noundef %cond4) {84; CHECK-LABEL: @need_freeze_of_individual_or_conditions3(85; CHECK-NEXT:  entry:86; CHECK-NEXT:    [[COND1_FR:%.*]] = freeze i1 [[COND1:%.*]]87; CHECK-NEXT:    [[TMP0:%.*]] = and i1 [[COND4:%.*]], [[COND1_FR]]88; CHECK-NEXT:    br i1 [[TMP0]], label [[ENTRY_SPLIT:%.*]], label [[EXIT_SPLIT:%.*]]89; CHECK:       entry.split:90; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]91; CHECK:       loop.header:92; CHECK-NEXT:    [[OR:%.*]] = or i1 [[COND2:%.*]], [[COND3:%.*]]93; CHECK-NEXT:    [[AND1:%.*]] = and i1 [[OR]], true94; CHECK-NEXT:    [[AND2:%.*]] = select i1 [[AND1]], i1 true, i1 false95; CHECK-NEXT:    br i1 [[AND2]], label [[LOOP_LATCH:%.*]], label [[EXIT:%.*]]96; CHECK:       loop.latch:97; CHECK-NEXT:    call void @some_func()98; CHECK-NEXT:    br label [[LOOP_HEADER]]99; CHECK:       exit:100; CHECK-NEXT:    br label [[EXIT_SPLIT]]101; CHECK:       exit.split:102; CHECK-NEXT:    ret i32 0103;104entry:105  br label %loop.header106 107loop.header:108  %or = or i1 %cond2, %cond3109  %and1 = and i1 %or, %cond1110  %and2 = select i1 %and1, i1 %cond4, i1 false111  br i1 %and2, label %loop.latch, label %exit112 113loop.latch:114  call void @some_func()115  br label %loop.header116 117exit:118  ret i32 0119}120 121define i32 @need_freeze_of_individual_and_conditions1(i1 %cond1, i1 %cond4) {122; CHECK-LABEL: @need_freeze_of_individual_and_conditions1(123; CHECK-NEXT:  entry:124; CHECK-NEXT:    [[COND4_FR:%.*]] = freeze i1 [[COND4:%.*]]125; CHECK-NEXT:    [[COND1_FR:%.*]] = freeze i1 [[COND1:%.*]]126; CHECK-NEXT:    [[TMP0:%.*]] = or i1 [[COND4_FR]], [[COND1_FR]]127; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT_SPLIT:%.*]], label [[ENTRY_SPLIT:%.*]]128; CHECK:       entry.split:129; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]130; CHECK:       loop.header:131; CHECK-NEXT:    [[COND_OR1:%.*]] = or i1 undef, false132; CHECK-NEXT:    [[COND_OR6:%.*]] = select i1 [[COND_OR1]], i1 true, i1 false133; CHECK-NEXT:    br i1 [[COND_OR6]], label [[EXIT:%.*]], label [[LOOP_LATCH:%.*]]134; CHECK:       loop.latch:135; CHECK-NEXT:    br label [[LOOP_HEADER]]136; CHECK:       exit:137; CHECK-NEXT:    br label [[EXIT_SPLIT]]138; CHECK:       exit.split:139; CHECK-NEXT:    ret i32 0140;141entry:142  br label %loop.header143 144loop.header:145  %cond_or1 = or i1 undef, %cond1146  %cond_or6 = select i1 %cond_or1, i1 true, i1 %cond4147  br i1 %cond_or6, label %exit, label %loop.latch148 149loop.latch:150  br label %loop.header151 152exit:153  ret i32 0154}155 156define i32 @need_freeze_of_individual_and_conditions2(i1 noundef %cond1, i1 %cond4) {157; CHECK-LABEL: @need_freeze_of_individual_and_conditions2(158; CHECK-NEXT:  entry:159; CHECK-NEXT:    [[COND4_FR:%.*]] = freeze i1 [[COND4:%.*]]160; CHECK-NEXT:    [[TMP0:%.*]] = or i1 [[COND4_FR]], [[COND1:%.*]]161; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT_SPLIT:%.*]], label [[ENTRY_SPLIT:%.*]]162; CHECK:       entry.split:163; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]164; CHECK:       loop.header:165; CHECK-NEXT:    [[COND_OR1:%.*]] = or i1 undef, false166; CHECK-NEXT:    [[COND_OR6:%.*]] = select i1 [[COND_OR1]], i1 true, i1 false167; CHECK-NEXT:    br i1 [[COND_OR6]], label [[EXIT:%.*]], label [[LOOP_LATCH:%.*]]168; CHECK:       loop.latch:169; CHECK-NEXT:    br label [[LOOP_HEADER]]170; CHECK:       exit:171; CHECK-NEXT:    br label [[EXIT_SPLIT]]172; CHECK:       exit.split:173; CHECK-NEXT:    ret i32 0174;175entry:176  br label %loop.header177 178loop.header:179  %cond_or1 = or i1 undef, %cond1180  %cond_or6 = select i1 %cond_or1, i1 true, i1 %cond4181  br i1 %cond_or6, label %exit, label %loop.latch182 183loop.latch:184  br label %loop.header185 186exit:187  ret i32 0188}189 190define i32 @need_freeze_of_individual_and_conditions3(i1 %cond1, i1 noundef %cond4) {191; CHECK-LABEL: @need_freeze_of_individual_and_conditions3(192; CHECK-NEXT:  entry:193; CHECK-NEXT:    [[COND1_FR:%.*]] = freeze i1 [[COND1:%.*]]194; CHECK-NEXT:    [[TMP0:%.*]] = or i1 [[COND4:%.*]], [[COND1_FR]]195; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT_SPLIT:%.*]], label [[ENTRY_SPLIT:%.*]]196; CHECK:       entry.split:197; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]198; CHECK:       loop.header:199; CHECK-NEXT:    [[COND_OR1:%.*]] = or i1 undef, false200; CHECK-NEXT:    [[COND_OR6:%.*]] = select i1 [[COND_OR1]], i1 true, i1 false201; CHECK-NEXT:    br i1 [[COND_OR6]], label [[EXIT:%.*]], label [[LOOP_LATCH:%.*]]202; CHECK:       loop.latch:203; CHECK-NEXT:    br label [[LOOP_HEADER]]204; CHECK:       exit:205; CHECK-NEXT:    br label [[EXIT_SPLIT]]206; CHECK:       exit.split:207; CHECK-NEXT:    ret i32 0208;209entry:210  br label %loop.header211 212loop.header:213  %cond_or1 = or i1 undef, %cond1214  %cond_or6 = select i1 %cond_or1, i1 true, i1 %cond4215  br i1 %cond_or6, label %exit, label %loop.latch216 217loop.latch:218  br label %loop.header219 220exit:221  ret i32 0222}223 224define i32 @need_freeze_of_individual_and_conditions4(i1 noundef %cond1, i1 noundef %cond4) {225; CHECK-LABEL: @need_freeze_of_individual_and_conditions4(226; CHECK-NEXT:  entry:227; CHECK-NEXT:    [[TMP0:%.*]] = or i1 [[COND4:%.*]], [[COND1:%.*]]228; CHECK-NEXT:    br i1 [[TMP0]], label [[EXIT_SPLIT:%.*]], label [[ENTRY_SPLIT:%.*]]229; CHECK:       entry.split:230; CHECK-NEXT:    br label [[LOOP_HEADER:%.*]]231; CHECK:       loop.header:232; CHECK-NEXT:    [[COND_OR1:%.*]] = or i1 undef, false233; CHECK-NEXT:    [[COND_OR6:%.*]] = select i1 [[COND_OR1]], i1 true, i1 false234; CHECK-NEXT:    br i1 [[COND_OR6]], label [[EXIT:%.*]], label [[LOOP_LATCH:%.*]]235; CHECK:       loop.latch:236; CHECK-NEXT:    br label [[LOOP_HEADER]]237; CHECK:       exit:238; CHECK-NEXT:    br label [[EXIT_SPLIT]]239; CHECK:       exit.split:240; CHECK-NEXT:    ret i32 0241;242entry:243  br label %loop.header244 245loop.header:246  %cond_or1 = or i1 undef, %cond1247  %cond_or6 = select i1 %cond_or1, i1 true, i1 %cond4248  br i1 %cond_or6, label %exit, label %loop.latch249 250loop.latch:251  br label %loop.header252 253exit:254  ret i32 0255}256