1; RUN: llc -O2 < %s | FileCheck %s 2 3target triple = "powerpc64le-grtev4-linux-gnu" 4 5; No duplication of loop header into entry block. 6define void @no_duplicate1(i64 %a) { 7; CHECK-LABEL: no_duplicate1 8; CHECK: mr 30, 3 9; CHECK-NEXT: b .LBB0_2 10 11; CHECK: .LBB0_2: 12; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 13; CHECK-NEXT: cmpldi 30, 100 14; CHECK-NEXT: bne 0, .LBB0_1 15entry: 16 br label %header 17 18header: 19 %ind = phi i64 [%a, %entry], [%val3, %latch] 20 %cond1 = icmp eq i64 %ind, 100 21 br i1 %cond1, label %middle, label %latch 22 23middle: 24 %condx = call i1 @foo() 25 %val1 = xor i64 %ind, 2 26 br label %latch 27 28latch: 29 %val2 = phi i64 [%ind, %header], [%val1, %middle] 30 %val3 = add i64 %val2, 1 31 %cond2 = call i1 @foo() 32 br i1 %cond2, label %end, label %header 33 34end: 35 ret void 36} 37 38; No duplication of loop header into latches. 39define void @no_duplicate2(i64 %a) { 40; CHECK-LABEL: no_duplicate2 41; CHECK: mr 30, 3 42; CHECK-NEXT: b .LBB1_2 43 44; CHECK: .LBB1_2: 45; CHECK-NEXT: # =>This Inner Loop Header: Depth=1 46; CHECK-NEXT: cmpldi 30, 100 47; CHECK-NEXT: bne 0, .LBB1_1 48 49; CHECK: %latch2 50; CHECK: b .LBB1_2 51 52; CHECK: %latch3 53; CHECK: b .LBB1_2 54entry: 55 br label %header 56 57header: 58 %ind = phi i64 [%a, %entry], [%val1, %latch1], [%val2, %latch2], [%val2, %latch3] 59 %cond1 = icmp eq i64 %ind, 100 60 br i1 %cond1, label %middle1, label %latch1 61 62latch1: 63 %cond2 = call i1 @foo() 64 %val1 = xor i64 %ind, 2 65 br i1 %cond2, label %end, label %header 66 67middle1: 68 %cond3 = call i1 @foo() 69 br i1 %cond3, label %latch1, label %middle2 70 71middle2: 72 %cond4 = call i1 @foo() 73 %val2 = add i64 %ind, 1 74 br i1 %cond4, label %latch2, label %latch3 75 76latch2: 77 call void @a() 78 br label %header 79 80latch3: 81 call void @b() 82 br label %header 83 84end: 85 ret void 86} 87 88 89declare i1 @foo() 90declare void @a() 91declare void @b() 92