As replacements will become more complex it is better to have a single AA responsible for replacing a use. Before this patch AAValueSimplify* and AAValueSimplifyReturned could both try to replace the returned value. The latter was marginally better for the old pass manager when a function was already carrying a `returned` attribute and when the context of the return instruction was important. The second shortcoming was resolved by looking for return attributes in the AAValueSimplifyCallSiteReturned initialization. The old PM impact is not concerning. This is yet another step towards the removal of AAReturnedValues, the very first AA we should now try to eliminate due to the overlapping logic with value simplification.
73 lines
3.1 KiB
LLVM
73 lines
3.1 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals
|
|
; RUN: opt -attributor -enable-new-pm=0 -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
|
|
; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=2 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
|
|
; RUN: opt -attributor-cgscc -enable-new-pm=0 -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
|
|
; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
|
|
|
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
|
target triple = "x86_64-unknown-linux-gnu"
|
|
|
|
define i64 @fn2() {
|
|
;
|
|
; CHECK: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
|
; CHECK-LABEL: define {{[^@]+}}@fn2
|
|
; CHECK-SAME: () #[[ATTR0:[0-9]+]] {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: ret i64 poison
|
|
;
|
|
entry:
|
|
%conv = sext i32 undef to i64
|
|
%div = sdiv i64 8, %conv
|
|
%call2 = call i64 @fn1(i64 %div)
|
|
ret i64 %call2
|
|
}
|
|
|
|
define i64 @fn2b(i32 %arg) {
|
|
;
|
|
; CHECK: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
|
; CHECK-LABEL: define {{[^@]+}}@fn2b
|
|
; CHECK-SAME: (i32 [[ARG:%.*]]) #[[ATTR0]] {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: [[CONV:%.*]] = sext i32 [[ARG]] to i64
|
|
; CHECK-NEXT: [[DIV:%.*]] = sdiv i64 8, [[CONV]]
|
|
; CHECK-NEXT: ret i64 [[DIV]]
|
|
;
|
|
entry:
|
|
%conv = sext i32 %arg to i64
|
|
%div = sdiv i64 8, %conv
|
|
%call2 = call i64 @fn1(i64 %div)
|
|
ret i64 %call2
|
|
}
|
|
|
|
define i64 @fn2c() {
|
|
; CHECK: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
|
; CHECK-LABEL: define {{[^@]+}}@fn2c
|
|
; CHECK-SAME: () #[[ATTR0]] {
|
|
; CHECK-NEXT: entry:
|
|
; CHECK-NEXT: ret i64 42
|
|
;
|
|
entry:
|
|
%conv = sext i32 undef to i64
|
|
%add = add i64 42, %conv
|
|
%call2 = call i64 @fn1(i64 %add)
|
|
ret i64 %call2
|
|
}
|
|
|
|
define internal i64 @fn1(i64 %p1) {
|
|
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
|
; IS__CGSCC____-LABEL: define {{[^@]+}}@fn1
|
|
; IS__CGSCC____-SAME: (i64 returned [[P1:%.*]]) #[[ATTR0]] {
|
|
; IS__CGSCC____-NEXT: entry:
|
|
; IS__CGSCC____-NEXT: [[TOBOOL:%.*]] = icmp ne i64 [[P1]], 0
|
|
; IS__CGSCC____-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], i64 [[P1]], i64 [[P1]]
|
|
; IS__CGSCC____-NEXT: ret i64 [[COND]]
|
|
;
|
|
entry:
|
|
%tobool = icmp ne i64 %p1, 0
|
|
%cond = select i1 %tobool, i64 %p1, i64 %p1
|
|
ret i64 %cond
|
|
}
|
|
;.
|
|
; CHECK: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn }
|
|
;.
|