Files
llvm/test/Transforms/FunctionAttrs/new_attributes.ll
T
Johannes Doerfert 9d74846aa2 [Attributor] FIX: Treat new attributes as changed ones
Summary:
When we have new attributes and we end the fixpoint iteration because
the iteration limit is reached, we need to treat the new ones as if they
changed in the last iteration, as they might have.

This adds a test for which we should not derive anything regardless of
the iteration limit, e.g., if we abort there should not be any
attributes manifested in the IR.

Reviewers: uenoku, sstefan1

Subscribers: hiraditya, bollu, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66549

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369768 91177308-0d34-0410-b5e6-96231b3b80d8
2019-08-23 15:24:57 +00:00

44 lines
1.4 KiB
LLVM

; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=0 -S | FileCheck %s
; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=1 -S | FileCheck %s
; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=2 -S | FileCheck %s
; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=3 -S | FileCheck %s
; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=4 -S | FileCheck %s
; RUN: opt < %s -attributor -attributor-disable=false -attributor-max-iterations=2147483647 -S | FileCheck %s
; CHECK-NOT: Function
; CHECK: declare i32 @foo1()
; CHECK-NOT: Function
; CHECK: declare i32 @foo2()
; CHECK-NOT: Function
; CHECK: declare i32 @foo3()
declare i32 @foo1()
declare i32 @foo2()
declare i32 @foo3()
; CHECK-NOT: Function
; CHECK: define internal i32 @bar() {
; CHECK-NEXT: %1 = call i32 @foo1()
; CHECK-NEXT: %2 = call i32 @foo2()
; CHECK-NEXT: %3 = call i32 @foo3()
; CHECK-NEXT: ret i32 1
; CHECK-NEXT: }
define internal i32 @bar() {
%1 = call i32 @foo1()
%2 = call i32 @foo2()
%3 = call i32 @foo3()
ret i32 1
}
; CHECK-NOT: Function
; CHECK: define i32 @baz() {
; CHECK-NEXT: %1 = call i32 @bar()
; CHECK-NEXT: ret i32 0
; CHECK-NEXT: }
define i32 @baz() {
%1 = call i32 @bar()
ret i32 0
}
; We should never derive anything here
; CHECK-NOT: attributes