mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
e683b7953c
Summary: This patch will filter attributes to only preserve those that are usefull. In the case of NoAlias it is filtered out not because it isn't usefull but because it is incorrect to preserve it as it is only valdi for the duration of the function. Reviewers: jdoerfert Reviewed By: jdoerfert Subscribers: jdoerfert, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D75828
67 lines
4.5 KiB
LLVM
67 lines
4.5 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -passes='assume-builder,verify' --enable-knowledge-retention -S %s | FileCheck %s --check-prefixes=BASIC
|
|
; RUN: opt -passes='assume-builder,verify' --enable-knowledge-retention --assume-preserve-all -S %s | FileCheck %s --check-prefixes=ALL
|
|
|
|
declare void @func(i32*, i32*)
|
|
declare void @func_cold(i32*) cold
|
|
declare void @func_strbool(i32*) "no-jump-tables"
|
|
declare void @func_many(i32*) "no-jump-tables" nounwind "less-precise-fpmad" willreturn norecurse
|
|
declare void @func_argattr(i32* align 8, i32* nonnull) nounwind
|
|
|
|
define void @test(i32* %P, i32* %P1, i32* %P2, i32* %P3) {
|
|
; BASIC-LABEL: @test(
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P:%.*]], i64 16), "nonnull"(i32* [[P]]) ]
|
|
; BASIC-NEXT: call void @func(i32* nonnull dereferenceable(16) [[P]], i32* null)
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P1:%.*]], i64 12), "nonnull"(i32* [[P]]) ]
|
|
; BASIC-NEXT: call void @func(i32* dereferenceable(12) [[P1]], i32* nonnull [[P]])
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "cold"(), "dereferenceable"(i32* [[P1]], i64 12) ]
|
|
; BASIC-NEXT: call void @func_cold(i32* dereferenceable(12) [[P1]]) #0
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "cold"(), "dereferenceable"(i32* [[P1]], i64 12) ]
|
|
; BASIC-NEXT: call void @func_cold(i32* dereferenceable(12) [[P1]])
|
|
; BASIC-NEXT: call void @func(i32* [[P1]], i32* [[P]])
|
|
; BASIC-NEXT: call void @func_strbool(i32* [[P1]])
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P]], i64 8), "dereferenceable"(i32* [[P]], i64 16) ]
|
|
; BASIC-NEXT: call void @func(i32* dereferenceable(16) [[P]], i32* dereferenceable(8) [[P]])
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "align"(i32* [[P1]], i64 8) ]
|
|
; BASIC-NEXT: call void @func_many(i32* align 8 [[P1]])
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "align"(i32* [[P2:%.*]], i64 8), "nonnull"(i32* [[P3:%.*]]) ]
|
|
; BASIC-NEXT: call void @func_argattr(i32* [[P2]], i32* [[P3]])
|
|
; BASIC-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(i32* [[P]]), "nonnull"(i32* [[P1]]) ]
|
|
; BASIC-NEXT: call void @func(i32* nonnull [[P1]], i32* nonnull [[P]])
|
|
; BASIC-NEXT: ret void
|
|
;
|
|
; ALL-LABEL: @test(
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P:%.*]], i64 16), "nonnull"(i32* [[P]]) ]
|
|
; ALL-NEXT: call void @func(i32* nonnull dereferenceable(16) [[P]], i32* null)
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P1:%.*]], i64 12), "nonnull"(i32* [[P]]) ]
|
|
; ALL-NEXT: call void @func(i32* dereferenceable(12) [[P1]], i32* nonnull [[P]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "cold"(), "dereferenceable"(i32* [[P1]], i64 12) ]
|
|
; ALL-NEXT: call void @func_cold(i32* dereferenceable(12) [[P1]]) #0
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "cold"(), "dereferenceable"(i32* [[P1]], i64 12) ]
|
|
; ALL-NEXT: call void @func_cold(i32* dereferenceable(12) [[P1]])
|
|
; ALL-NEXT: call void @func(i32* [[P1]], i32* [[P]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "no-jump-tables"() ]
|
|
; ALL-NEXT: call void @func_strbool(i32* [[P1]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "dereferenceable"(i32* [[P]], i64 8), "dereferenceable"(i32* [[P]], i64 16) ]
|
|
; ALL-NEXT: call void @func(i32* dereferenceable(16) [[P]], i32* dereferenceable(8) [[P]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "align"(i32* [[P1]], i64 8), "less-precise-fpmad"(), "no-jump-tables"(), "norecurse"(), "nounwind"(), "willreturn"() ]
|
|
; ALL-NEXT: call void @func_many(i32* align 8 [[P1]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "align"(i32* [[P2:%.*]], i64 8), "nonnull"(i32* [[P3:%.*]]), "nounwind"() ]
|
|
; ALL-NEXT: call void @func_argattr(i32* [[P2]], i32* [[P3]])
|
|
; ALL-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(i32* [[P]]), "nonnull"(i32* [[P1]]) ]
|
|
; ALL-NEXT: call void @func(i32* nonnull [[P1]], i32* nonnull [[P]])
|
|
; ALL-NEXT: ret void
|
|
;
|
|
call void @func(i32* nonnull dereferenceable(16) %P, i32* null)
|
|
call void @func(i32* dereferenceable(12) %P1, i32* nonnull %P)
|
|
call void @func_cold(i32* dereferenceable(12) %P1) cold
|
|
call void @func_cold(i32* dereferenceable(12) %P1)
|
|
call void @func(i32* %P1, i32* %P)
|
|
call void @func_strbool(i32* %P1)
|
|
call void @func(i32* dereferenceable(16) %P, i32* dereferenceable(8) %P)
|
|
call void @func_many(i32* align 8 %P1)
|
|
call void @func_argattr(i32* %P2, i32* %P3)
|
|
call void @func(i32* nonnull %P1, i32* nonnull %P)
|
|
ret void
|
|
}
|