Arthur Eubanks 6699029b67 [NewPM][opt] Run the "default" AA pipeline by default
We tend to assume that the AA pipeline is by default the default AA
pipeline and it's confusing when it's empty instead.

PR48779

Initially reverted due to BasicAA running analyses in an unspecified
order (multiple function calls as parameters), fixed by fetching
analyses before the call to construct BasicAA.

Reviewed By: asbirlea

Differential Revision: https://reviews.llvm.org/D95117
2021-01-21 21:08:54 -08:00

91 lines
2.4 KiB
LLVM

; RUN: opt -passes="default<O2>" -disable-output %s
; REQUIRES: asserts
; PR42272
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
@b = external global i32, align 4
@f = external global i32, align 4
@g = external global i32, align 4
define i32* @a(i32 %h) #0 {
entry:
%h.addr = alloca i32, align 4
store i32 %h, i32* %h.addr, align 4
%tmp0 = load i32, i32* %h.addr, align 4
switch i32 %tmp0, label %sw.default [
i32 4, label %sw.bb
i32 3, label %sw.bb1
i32 2, label %sw.bb3
]
sw.bb: ; preds = %entry
%call = call i32 (...) @c()
unreachable
sw.bb1: ; preds = %entry
%call2 = call i32 (...) @c()
unreachable
sw.bb3: ; preds = %entry
%call4 = call i32 (...) @c()
%conv = sext i32 %call4 to i64
%tmp1 = inttoptr i64 %conv to i32*
ret i32* %tmp1
sw.default: ; preds = %entry
unreachable
}
define i32 @m() #1 {
entry:
%call = call i32 @j()
%call1 = call i32 @j()
ret i32 undef
}
define internal i32 @j() #0 {
entry:
%i = alloca i32, align 4
store i32 0, i32* %i, align 4
br label %for.cond
for.cond: ; preds = %for.body, %entry
%tmp0 = load i32, i32* %i, align 4
%tmp1 = load i32, i32* @f, align 4
%cmp = icmp ult i32 %tmp0, %tmp1
br i1 %cmp, label %for.body, label %for.cond.cleanup
for.cond.cleanup: ; preds = %for.cond
%tmp2 = load i32, i32* @f, align 4
%call3 = call i32* @a(i32 %tmp2)
ret i32 undef
for.body: ; preds = %for.cond
%call = call i32 (...) @c()
%call1 = call i32 (...) @c()
%call2 = call i32 (...) @c()
%tmp3 = load i32, i32* @b, align 4
%tmp4 = load i32, i32* @g, align 4
%sub = sub nsw i32 %tmp4, %tmp3
store i32 %sub, i32* @g, align 4
%tmp5 = load i32, i32* %i, align 4
%inc = add i32 %tmp5, 1
store i32 %inc, i32* %i, align 4
br label %for.cond
}
declare i32 @c(...) #0
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #2
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #2
attributes #0 = { "use-soft-float"="false" }
attributes #1 = { "target-cpu"="x86-64" }
attributes #2 = { argmemonly nounwind }