109 lines · plain
1; RUN: llc < %s -mtriple=x86_64-- -mcpu=corei7-avx -mattr=-slow-incdec -disable-lsr -pre-RA-sched=source -enable-misched -verify-machineinstrs | FileCheck %s2 3; Verify that TEST+JE are scheduled together.4; CHECK: test_je5; CHECK: %loop6; CHECK: test7; CHECK-NEXT: je8define void @test_je() {9entry:10 br label %loop11 12loop:13 %var = phi ptr [ null, %entry ], [ %next.load, %loop1 ], [ %var, %loop2 ]14 %next.ptr = phi ptr [ null, %entry ], [ %next.ptr, %loop1 ], [ %gep, %loop2 ]15 br label %loop116 17loop1:18 %cond = icmp eq ptr %var, null19 %next.load = load ptr, ptr %next.ptr20 br i1 %cond, label %loop, label %loop221 22loop2: ; preds = %loop123 %gep = getelementptr inbounds ptr, ptr %next.ptr, i32 124 store ptr %next.load, ptr undef25 br label %loop26}27 28; Verify that DEC+JE are scheduled together.29; CHECK: dec_je30; CHECK: %loop131; CHECK: dec32; CHECK-NEXT: je33define void @dec_je() {34entry:35 br label %loop36 37loop:38 %var = phi i32 [ 0, %entry ], [ %next.var, %loop1 ], [ %var2, %loop2 ]39 %next.ptr = phi ptr [ null, %entry ], [ %next.ptr, %loop1 ], [ %gep, %loop2 ]40 br label %loop141 42loop1:43 %var2 = sub i32 %var, 144 %cond = icmp eq i32 %var2, 045 %next.load = load ptr, ptr %next.ptr46 %next.var = load i32, ptr %next.load47 br i1 %cond, label %loop, label %loop248 49loop2:50 %gep = getelementptr inbounds ptr, ptr %next.ptr, i32 151 store ptr %next.load, ptr undef52 br label %loop53}54 55; DEC+JS should *not* be scheduled together.56; CHECK: dec_js57; CHECK: %loop158; CHECK: dec59; CHECK: mov60; CHECK: js61define void @dec_js() {62entry:63 br label %loop2a64 65loop2a: ; preds = %loop1, %body, %entry66 %var = phi i32 [ 0, %entry ], [ %next.var, %loop1 ], [ %var2, %loop2b ]67 %next.ptr = phi ptr [ null, %entry ], [ %next.ptr, %loop1 ], [ %gep, %loop2b ]68 br label %loop169 70loop1: ; preds = %loop2a, %loop2b71 %var2 = sub i32 %var, 172 %cond = icmp slt i32 %var2, 073 %next.load = load ptr, ptr %next.ptr74 %next.var = load i32, ptr %next.load75 br i1 %cond, label %loop2a, label %loop2b76 77loop2b: ; preds = %loop178 %gep = getelementptr inbounds ptr, ptr %next.ptr, i32 179 store ptr %next.load, ptr undef80 br label %loop2a81}82 83; Verify that CMP+JB are scheduled together.84; CHECK: cmp_jb85; CHECK: %loop186; CHECK: cmp87; CHECK-NEXT: jb88define void @cmp_jb(i32 %n) {89entry:90 br label %loop2a91 92loop2a: ; preds = %loop1, %body, %entry93 %var = phi i32 [ 0, %entry ], [ %next.var, %loop1 ], [ %var2, %loop2b ]94 %next.ptr = phi ptr [ null, %entry ], [ %next.ptr, %loop1 ], [ %gep, %loop2b ]95 br label %loop196 97loop1: ; preds = %loop2a, %loop2b98 %var2 = sub i32 %var, 199 %cond = icmp ult i32 %var2, %n100 %next.load = load ptr, ptr %next.ptr101 %next.var = load i32, ptr %next.load102 br i1 %cond, label %loop2a, label %loop2b103 104loop2b: ; preds = %loop1105 %gep = getelementptr inbounds ptr, ptr %next.ptr, i32 1106 store ptr %next.load, ptr undef107 br label %loop2a108}109