mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 13:33:37 +02:00
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 }
|