[Attributor] Implement AANoAliasCallSiteArgument initialization

Summary: This patch adds an appropriate `initialize` method for `AANoAliasCallSiteArgument`.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 370456
This commit is contained in:
Hideto Ueno 2019-08-30 10:00:32 +00:00
parent 3b08a61f7e
commit 6381b143f6
2 changed files with 14 additions and 7 deletions

View File

@ -1592,8 +1592,10 @@ struct AANoAliasCallSiteArgument final : AANoAliasImpl {
/// See AbstractAttribute::initialize(...).
void initialize(Attributor &A) override {
// TODO: It isn't sound to initialize as the same with `AANoAliasImpl`
// because `noalias` may not be valid in the current position.
// See callsite argument attribute and callee argument attribute.
ImmutableCallSite ICS(&getAnchorValue());
if (ICS.paramHasAttr(getArgNo(), Attribute::NoAlias))
indicateOptimisticFixpoint();
}
/// See AbstractAttribute::updateImpl(...).

View File

@ -142,8 +142,7 @@ define i8* @test8(i32* %0) nounwind uwtable {
; TEST 9
; Simple Argument Test
define internal void @test9(i8* %a, i8* %b) {
; FIXME: missing noalias
; CHECK: define internal void @test9(i8* %a, i8* %b)
; CHECK: define internal void @test9(i8* noalias %a, i8* %b)
ret void
}
define void @test9_helper(i8* %a, i8* %b) {
@ -156,12 +155,18 @@ define void @test9_helper(i8* %a, i8* %b) {
; TEST 10
; Simple CallSite Test
declare void @test10_helper(i8* %a)
declare void @test10_helper_1(i8* %a)
define void @test10_helper_2(i8* noalias %a) {
ret void
}
define void @test10(i8* noalias %a) {
; CHECK: define void @test10(i8* noalias %a)
; FIXME: missing noalias
; CHECK-NEXT: tail call void @test10_helper(i8* %a)
tail call void @test10_helper(i8* %a)
; CHECK-NEXT: tail call void @test10_helper_1(i8* %a)
tail call void @test10_helper_1(i8* %a)
; CHECK-NEXT: tail call void @test10_helper_2(i8* noalias %a)
tail call void @test10_helper_2(i8* %a)
ret void
}