66 lines · plain
1; RUN: opt -passes=gvn-hoist -S < %s | FileCheck %s2target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"3target triple = "x86_64-unknown-linux-gnu"4 5@input = local_unnamed_addr global ptr null, align 86 7; Check that the load instruction is **not** hoisted8; CHECK-LABEL: @_Z3fooPii9; CHECK-LABEL: if.then:10; CHECK-NEXT: load11; CHECK-LABEL: if2:12; CHECK: load13; CHECK-LABEL: @main14 15define i32 @_Z3fooPii(ptr %p, i32 %x) local_unnamed_addr {16entry:17 %cmp.not = icmp eq ptr %p, null18 br i1 %cmp.not, label %if.end3, label %if.then19 20if.then: ; preds = %entry21 %0 = load i32, ptr %p, align 4, !tbaa !322 %add = add nsw i32 %0, %x23 %cmp1 = icmp eq i32 %add, 424 br i1 %cmp1, label %if2, label %if.end325 26if.end3: ; preds = %entry, %if.then27 %x.addr.0 = phi i32 [ %add, %if.then ], [ %x, %entry ]28 %add4 = add nsw i32 %x.addr.0, 229 br i1 %cmp.not, label %if.end11, label %if230 31if2: ; preds = %if.end3, %if.then32 %x.addr.1 = phi i32 [ 4, %if.then ], [ %x.addr.0, %if.end3 ]33 %y.0 = phi i32 [ 2, %if.then ], [ %add4, %if.end3 ]34 %1 = load i32, ptr %p, align 4, !tbaa !335 %add7 = add nsw i32 %x.addr.1, %136 %cmp8 = icmp eq i32 %add7, 537 br i1 %cmp8, label %end, label %if.end1138 39if.end11: ; preds = %if.end3, %if240 %x.addr.2 = phi i32 [ %add7, %if2 ], [ %x.addr.0, %if.end3 ]41 %y.1 = phi i32 [ %y.0, %if2 ], [ %add4, %if.end3 ]42 %add12 = add nsw i32 %y.1, %x.addr.243 br label %end44 45end: ; preds = %if2, %if.end1146 %x.addr.3 = phi i32 [ 5, %if2 ], [ %x.addr.2, %if.end11 ]47 %y.2 = phi i32 [ %y.0, %if2 ], [ %add12, %if.end11 ]48 %add13 = add nsw i32 %x.addr.3, %y.249 ret i32 %add1350}51 52define i32 @main() local_unnamed_addr {53entry:54 %0 = load ptr, ptr @input, align 8, !tbaa !755 %call = call i32 @_Z3fooPii(ptr %0, i32 0)56 ret i32 %call57}58 59 60!3 = !{!4, !4, i64 0}61!4 = !{!"int", !5, i64 0}62!5 = !{!"omnipotent char", !6, i64 0}63!6 = !{!"Simple C++ TBAA"}64!7 = !{!8, !8, i64 0}65!8 = !{!"pointer@_ZTSPi", !5, i64 0}66