brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · 3ddc1ba Raw
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