brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 0dd4d01 Raw
121 lines · plain
1; RUN: opt -passes=licm < %s -S | FileCheck %s2; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<target-ir>,require<scalar-evolution>,require<opt-remark-emit>,loop-mssa(licm)' < %s -S | FileCheck %s3 4define void @test1(i64 %n) {5; CHECK-LABEL: @test16; CHECK: fence7; CHECK-LABEL: loop:8entry:9  br label %loop10loop:11  %iv = phi i64 [0, %entry], [%iv.next, %loop]12  fence release13  %iv.next = add i64 %iv, 114  %test = icmp slt i64 %iv, %n15  br i1 %test, label %loop, label %exit16exit:17  ret void18}19 20define void @test2(i64 %n) {21; CHECK-LABEL: @test222; CHECK: fence23; CHECK-LABEL: loop:24entry:25  br label %loop26loop:27  %iv = phi i64 [0, %entry], [%iv.next, %loop]28  fence acquire29  %iv.next = add i64 %iv, 130  %test = icmp slt i64 %iv, %n31  br i1 %test, label %loop, label %exit32exit:33  ret void34}35 36define void @test3(i64 %n) {37; CHECK-LABEL: @test338; CHECK: fence39; CHECK-LABEL: loop:40entry:41  br label %loop42loop:43  %iv = phi i64 [0, %entry], [%iv.next, %loop]44  fence acq_rel45  %iv.next = add i64 %iv, 146  %test = icmp slt i64 %iv, %n47  br i1 %test, label %loop, label %exit48exit:49  ret void50}51 52define void @test4(i64 %n) {53; CHECK-LABEL: @test454; CHECK: fence55; CHECK-LABEL: loop:56entry:57  br label %loop58loop:59  %iv = phi i64 [0, %entry], [%iv.next, %loop]60  fence seq_cst61  %iv.next = add i64 %iv, 162  %test = icmp slt i64 %iv, %n63  br i1 %test, label %loop, label %exit64exit:65  ret void66}67 68define void @testneg1(i64 %n, ptr %p) {69; CHECK-LABEL: @testneg170; CHECK-LABEL: loop:71; CHECK: fence72entry:73  br label %loop74loop:75  %iv = phi i64 [0, %entry], [%iv.next, %loop]76  store i64 %iv, ptr %p77  fence release78  %iv.next = add i64 %iv, 179  %test = icmp slt i64 %iv, %n80  br i1 %test, label %loop, label %exit81exit:82  ret void83}84 85define void @testneg2(ptr %p) {86; CHECK-LABEL: @testneg287; CHECK-LABEL: loop:88; CHECK: fence89entry:90  br label %loop91loop:92  %iv = phi i64 [0, %entry], [%iv.next, %loop]93  fence acquire94  %n = load i64, ptr %p95  %iv.next = add i64 %iv, 196  %test = icmp slt i64 %iv, %n97  br i1 %test, label %loop, label %exit98exit:99  ret void100}101 102; Note: While a false negative for LICM on it's own, O3 does get this103; case by combining the fences.104define void @testfn1(i64 %n, ptr %p) {105; CHECK-LABEL: @testfn1106; CHECK-LABEL: loop:107; CHECK: fence108entry:109  br label %loop110loop:111  %iv = phi i64 [0, %entry], [%iv.next, %loop]112  fence release113  fence release114  %iv.next = add i64 %iv, 1115  %test = icmp slt i64 %iv, %n116  br i1 %test, label %loop, label %exit117exit:118  ret void119}120 121