66 lines · plain
1; RUN: opt < %s -aa-pipeline=basic-aa,globals-aa -S -passes='require<globals-aa>,function(loop-mssa(licm))' | FileCheck %s2 3target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"4target triple = "x86_64-apple-macosx10.10.0"5 6@b = common global i32 0, align 47@c = internal global i32 0, align 48@d = common global i32 0, align 49@e = common global ptr null, align 410 11define void @foo(ptr %P) noinline {12; CHECK: define void @foo13 %loadp = load i32, ptr %P, align 414 store i32 %loadp, ptr @d, align 415 ret void16}17 18define void @bar() noinline {19; CHECK: define void @bar20 %loadp = load i32, ptr @d, align 421 store i32 %loadp, ptr @c, align 422 ret void23}24 25define i32 @main() {26entry:27 %retval = alloca i32, align 428 %c = alloca [1 x i32], align 429 store i32 0, ptr %retval, align 430 call void @bar()31 store i32 0, ptr @b, align 432 br label %for.cond33 ;; Check that @c is LICM'ed out.34; CHECK: load i32, ptr @c35for.cond: ; preds = %for.inc, %entry36; CHECK-LABEL: for.cond:37; CHECK: load i32, ptr @b38 %a1 = load i32, ptr @b, align 439 %aa2 = load i32, ptr @c, align 440 %add = add nsw i32 %a1, %aa241 %p1 = load ptr, ptr @e, align 442 call void @foo(ptr %p1)43 %cmp = icmp slt i32 %add, 344 br i1 %cmp, label %for.body, label %for.end45 46for.body: ; preds = %for.cond47 %a2 = load i32, ptr @b, align 448 %idxprom = sext i32 %a2 to i6449 br label %for.inc50 51for.inc: ; preds = %for.body52 %a3 = load i32, ptr @b, align 453 %inc = add nsw i32 %a3, 154 store i32 %inc, ptr @b, align 455 br label %for.cond56 57for.end: ; preds = %for.cond58 ret i32 059}60 61; Function Attrs: nounwind argmemonly62declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1) nounwind argmemonly63 64; Function Attrs: noreturn nounwind65declare void @abort() noreturn nounwind66