forked from OSchip/llvm-project
34 lines
804 B
LLVM
34 lines
804 B
LLVM
; RUN: opt -instcombine -S < %s | FileCheck %s
|
|
|
|
declare i32 @k() convergent
|
|
declare i32 @f()
|
|
|
|
define i32 @extern() {
|
|
; Convergent attr shouldn't be removed here; k is convergent.
|
|
; CHECK: call i32 @k() [[CONVERGENT_ATTR:#[0-9]+]]
|
|
%a = call i32 @k() convergent
|
|
ret i32 %a
|
|
}
|
|
|
|
define i32 @extern_no_attr() {
|
|
; Convergent attr shouldn't be added here, even though k is convergent.
|
|
; CHECK: call i32 @k(){{$}}
|
|
%a = call i32 @k()
|
|
ret i32 %a
|
|
}
|
|
|
|
define i32 @no_extern() {
|
|
; Convergent should be removed here, as the target is convergent.
|
|
; CHECK: call i32 @f(){{$}}
|
|
%a = call i32 @f() convergent
|
|
ret i32 %a
|
|
}
|
|
|
|
define i32 @indirect_call(i32 ()* %f) {
|
|
; CHECK call i32 %f() [[CONVERGENT_ATTR]]
|
|
%a = call i32 %f() convergent
|
|
ret i32 %a
|
|
}
|
|
|
|
; CHECK: [[CONVERGENT_ATTR]] = { convergent }
|