mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-25 18:55:48 +00:00
Reapply "[Intrinsics] Add nocallback
to the default intrinsic attributes"
This reverts commit c5f789050daab25aad6770790987e2b7c0395936 and reapplies 7aea3ea8c3b33c9bb338d5d6c0e4832be1d09ac3 with additional test changes.
This commit is contained in:
parent
7babc8e6cd
commit
a81fff8afd
@ -11,5 +11,5 @@ float foo(float X) {
|
||||
// HAS_ERRNO-NOT: attributes [[ATTR]] = {{{.*}} readnone
|
||||
|
||||
// NO_ERRNO: declare float @llvm.sqrt.f32(float) [[ATTR:#[0-9]+]]
|
||||
// NO_ERRNO: attributes [[ATTR]] = { nofree nosync nounwind readnone {{.*}}}
|
||||
// NO_ERRNO: attributes [[ATTR]] = { nocallback nofree nosync nounwind readnone {{.*}}}
|
||||
|
||||
|
@ -125,4 +125,4 @@ void test_builtins(double d, float f, long double ld) {
|
||||
|
||||
// CHECK-YES: attributes [[NUW]] = { nounwind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+x87" }
|
||||
// CHECK-NO-DAG: attributes [[NUW_RN]] = { nounwind readnone{{.*}} }
|
||||
// CHECK-NO-DAG: attributes [[NUW_RNI]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
// CHECK-NO-DAG: attributes [[NUW_RNI]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
|
@ -120,6 +120,9 @@ class ReadNone<AttrIndex idx> : IntrinsicProperty {
|
||||
|
||||
def IntrNoReturn : IntrinsicProperty;
|
||||
|
||||
// Applied by default.
|
||||
def IntrNoCallback : IntrinsicProperty<1>;
|
||||
|
||||
// IntrNoSync - Threads executing the intrinsic will not synchronize using
|
||||
// memory or other means. Applied by default.
|
||||
def IntrNoSync : IntrinsicProperty<1>;
|
||||
|
@ -9702,6 +9702,10 @@ private:
|
||||
const SetVector<Function *> &Edges = AAEdges->getOptimisticEdges();
|
||||
|
||||
for (Function *Edge : Edges) {
|
||||
// Functions that do not call back into the module can be ignored.
|
||||
if (Edge->hasFnAttribute(Attribute::NoCallback))
|
||||
continue;
|
||||
|
||||
// We don't need a dependency if the result is reachable.
|
||||
const AAFunctionReachability &EdgeReachability =
|
||||
A.getAAFor<AAFunctionReachability>(
|
||||
|
@ -22,6 +22,6 @@ entry:
|
||||
declare <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>*, i32, <8 x i1>, <8 x i16>) nounwind readonly
|
||||
declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>) nounwind
|
||||
|
||||
; CHECK: attributes #0 = { argmemonly nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #1 = { argmemonly nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #0 = { argmemonly nocallback nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #1 = { argmemonly nocallback nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes [[ATTR]] = { nounwind }
|
||||
|
@ -22,8 +22,8 @@ entry:
|
||||
declare <8 x i16> @llvm.masked.load.v8i16.p0v8i16(<8 x i16>*, i32, <8 x i1>, <8 x i16>) nounwind readonly
|
||||
declare void @llvm.masked.store.v8i16.p0v8i16(<8 x i16>, <8 x i16>*, i32, <8 x i1>) nounwind
|
||||
|
||||
; CHECK: attributes #0 = { argmemonly nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #1 = { argmemonly nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #0 = { argmemonly nocallback nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #1 = { argmemonly nocallback nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
|
||||
!0 = !{!"tbaa root"}
|
||||
|
@ -13,14 +13,14 @@ declare i32 @llvm.aarch64.stxp(i64, i64, i32*)
|
||||
; CHECK: declare i32 @llvm.aarch64.dsb(i32) [[NOFREE_NOUNWIND_WILLRETURN]]
|
||||
declare i32 @llvm.aarch64.dsb(i32)
|
||||
|
||||
; CHECK: declare i64 @llvm.aarch64.neon.sqdmulls.scalar(i32, i32) [[NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN:#[0-9]+]]
|
||||
; CHECK: declare i64 @llvm.aarch64.neon.sqdmulls.scalar(i32, i32) [[NO_CALLBACK_NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN:#[0-9]+]]
|
||||
declare i64 @llvm.aarch64.neon.sqdmulls.scalar(i32, i32)
|
||||
|
||||
; CHECK: declare <4 x i32> @llvm.aarch64.neon.shadd.v4i32(<4 x i32>, <4 x i32>) [[NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]]
|
||||
; CHECK: declare <4 x i32> @llvm.aarch64.neon.shadd.v4i32(<4 x i32>, <4 x i32>) [[NO_CALLBACK_NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]]
|
||||
declare <4 x i32> @llvm.aarch64.neon.shadd.v4i32(<4 x i32>, <4 x i32>)
|
||||
|
||||
; CHECK: declare <vscale x 4 x i32> @llvm.aarch64.sve.dup.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, i32) [[NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]]
|
||||
; CHECK: declare <vscale x 4 x i32> @llvm.aarch64.sve.dup.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, i32) [[NO_CALLBACK_NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]]
|
||||
declare <vscale x 4 x i32> @llvm.aarch64.sve.dup.nxv4i32(<vscale x 4 x i32>, <vscale x 4 x i1>, i32)
|
||||
|
||||
; CHECK: attributes [[NOFREE_NOUNWIND_WILLRETURN]] = { nofree nounwind willreturn }
|
||||
; CHECK: attributes [[NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]] = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes [[NO_CALLBACK_NOFREE_NOSYNC_NOUNWIND_READNONE_WILLRETURN]] = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
|
@ -12,13 +12,13 @@
|
||||
; CHECK-NEXT: call void @llvm.dbg.value(metadata i64 0, metadata !41, metadata !DIExpression(DW_OP_constu, 0, DW_OP_stack_value)), !dbg !44
|
||||
; CHECK-NEXT: }
|
||||
|
||||
; CHECK: ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK: ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK-NEXT: declare void @llvm.dbg.declare(metadata, metadata, metadata) #0
|
||||
|
||||
; CHECK: ; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK: ; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK-NEXT: declare void @llvm.dbg.value(metadata, metadata, metadata) #0
|
||||
|
||||
; CHECK: attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
|
||||
; CHECK: !llvm.dbg.cu = !{!0}
|
||||
; CHECK-NEXT: !FooType = !{!28}
|
||||
|
@ -1179,12 +1179,12 @@ define void @intrinsics.codegen() {
|
||||
; CHECK: attributes #26 = { sspstrong }
|
||||
; CHECK: attributes #27 = { uwtable }
|
||||
; CHECK: attributes #28 = { "cpu"="cortex-a8" }
|
||||
; CHECK: attributes #29 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #30 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #29 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #30 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #31 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #32 = { argmemonly nounwind }
|
||||
; CHECK: attributes #33 = { nounwind readonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1242,12 +1242,12 @@ define void @misc.metadata() {
|
||||
; CHECK: attributes #29 = { "thunk" }
|
||||
; CHECK: attributes #30 = { uwtable }
|
||||
; CHECK: attributes #31 = { "cpu"="cortex-a8" }
|
||||
; CHECK: attributes #32 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #33 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #32 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #33 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #34 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #35 = { argmemonly nounwind }
|
||||
; CHECK: attributes #36 = { nounwind readonly }
|
||||
; CHECK: attributes #37 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #38 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1552,12 +1552,12 @@ normal:
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #40 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #41 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1625,13 +1625,13 @@ declare void @f.writeonly() writeonly
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { writeonly }
|
||||
; CHECK: attributes #41 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #41 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #42 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1650,13 +1650,13 @@ define i8** @constexpr() {
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { writeonly }
|
||||
; CHECK: attributes #41 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #41 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #42 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1665,14 +1665,14 @@ define i8** @constexpr() {
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { writeonly }
|
||||
; CHECK: attributes #41 = { speculatable }
|
||||
; CHECK: attributes #42 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #42 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #43 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1676,14 +1676,14 @@ define i8** @constexpr() {
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { writeonly }
|
||||
; CHECK: attributes #41 = { speculatable }
|
||||
; CHECK: attributes #42 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #42 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #43 = { builtin }
|
||||
|
||||
;; Metadata
|
||||
|
@ -1970,12 +1970,12 @@ declare void @f.nosanitize_bounds() nosanitize_bounds
|
||||
; CHECK: attributes #32 = { norecurse }
|
||||
; CHECK: attributes #33 = { inaccessiblememonly }
|
||||
; CHECK: attributes #34 = { inaccessiblemem_or_argmemonly }
|
||||
; CHECK: attributes #35 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #35 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #36 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #37 = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #38 = { argmemonly nounwind }
|
||||
; CHECK: attributes #39 = { nounwind readonly }
|
||||
; CHECK: attributes #40 = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #40 = { inaccessiblemem_or_argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #41 = { writeonly }
|
||||
; CHECK: attributes #42 = { speculatable }
|
||||
; CHECK: attributes #43 = { strictfp }
|
||||
|
@ -13,9 +13,9 @@ define void @test(i8* %p1, i16* %p16) {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: Function Attrs: inaccessiblememonly nofree nosync nounwind speculatable willreturn
|
||||
; CHECK: Function Attrs: inaccessiblememonly nocallback nofree nosync nounwind speculatable willreturn
|
||||
; CHECK: declare i8* @llvm.launder.invariant.group.p0i8(i8*)
|
||||
; CHECK: Function Attrs: inaccessiblememonly nofree nosync nounwind speculatable willreturn
|
||||
; CHECK: Function Attrs: inaccessiblememonly nocallback nofree nosync nounwind speculatable willreturn
|
||||
; CHECK: declare i16* @llvm.launder.invariant.group.p0i16(i16*)
|
||||
declare i8* @llvm.invariant.group.barrier(i8*)
|
||||
declare i8* @llvm.invariant.group.barrier.p0i8(i8*)
|
||||
|
@ -115,5 +115,5 @@ define void @f0() {
|
||||
ret void
|
||||
}
|
||||
;.
|
||||
; CHECK: attributes #0 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #0 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
;.
|
||||
|
@ -69,5 +69,5 @@ define void @trap() {
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #1 = { cold noreturn nounwind }
|
||||
|
@ -50,5 +50,5 @@ entry:
|
||||
; CHECK-NOT: argmemonly
|
||||
; CHECK-NOT: speculatable
|
||||
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; CHECK: Function Attrs: nocallback nofree nosync nounwind readnone willreturn
|
||||
; CHECK-NEXT: declare void @llvm.donothing
|
||||
|
@ -91,11 +91,11 @@ declare void @use(i8* readonly)
|
||||
declare void @useBool(i1)
|
||||
|
||||
declare void @clobber(i8*)
|
||||
; CHECK: Function Attrs: inaccessiblememonly nofree nosync nounwind speculatable willreturn{{$}}
|
||||
; CHECK: Function Attrs: inaccessiblememonly nocallback nofree nosync nounwind speculatable willreturn{{$}}
|
||||
; CHECK-NEXT: declare i8* @llvm.launder.invariant.group.p0i8(i8*)
|
||||
declare i8* @llvm.launder.invariant.group.p0i8(i8*)
|
||||
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone speculatable willreturn{{$}}
|
||||
; CHECK: Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn{{$}}
|
||||
; CHECK-NEXT: declare i8* @llvm.strip.invariant.group.p0i8(i8*)
|
||||
declare i8* @llvm.strip.invariant.group.p0i8(i8*)
|
||||
|
||||
|
@ -64,6 +64,6 @@ declare void @ext(<{ %struct.a }>* inalloca(<{ %struct.a }>))
|
||||
declare i8* @llvm.stacksave()
|
||||
declare void @llvm.stackrestore(i8*)
|
||||
;.
|
||||
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { willreturn }
|
||||
;.
|
||||
|
@ -100,15 +100,15 @@ define i32 @main() nounwind {
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 0
|
||||
; IS__TUNIT_NPM-NEXT: store i32 1, i32* [[TMP1]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP4:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i32 0, i32 1
|
||||
; IS__TUNIT_NPM-NEXT: [[S_CAST1:%.*]] = bitcast %struct.ss* [[S]] to i32*
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = load i32, i32* [[S_CAST1]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: [[S_0_12:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i64 0, i32 1
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i64, i64* [[S_0_12]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: [[C0:%.*]] = call i32 @f(i32 [[TMP0]], i64 [[TMP1]]) #[[ATTR2:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[S_CAST:%.*]] = bitcast %struct.ss* [[S]] to i32*
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP2:%.*]] = load i32, i32* [[S_CAST]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP0:%.*]] = load i32, i32* [[S_CAST]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: [[S_0_1:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i64 0, i32 1
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP3:%.*]] = load i64, i64* [[S_0_1]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i64, i64* [[S_0_1]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: [[C0:%.*]] = call i32 @f(i32 [[TMP0]], i64 [[TMP1]]) #[[ATTR2:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[S_CAST1:%.*]] = bitcast %struct.ss* [[S]] to i32*
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP2:%.*]] = load i32, i32* [[S_CAST1]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: [[S_0_12:%.*]] = getelementptr [[STRUCT_SS]], %struct.ss* [[S]], i64 0, i32 1
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP3:%.*]] = load i64, i64* [[S_0_12]], align 32
|
||||
; IS__TUNIT_NPM-NEXT: [[C1:%.*]] = call i32 @g(i32 [[TMP2]], i64 [[TMP3]]) #[[ATTR2]]
|
||||
; IS__TUNIT_NPM-NEXT: [[A:%.*]] = add i32 [[C0]], [[C1]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32 [[A]]
|
||||
|
@ -31,10 +31,10 @@ define internal void @bar(%p_t %p) {
|
||||
; IS__CGSCC_OPM-NEXT: call void @llvm.dbg.value(metadata i16* [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()), !dbg [[DBG5:![0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@bar
|
||||
; IS__CGSCC_NPM-SAME: (i16* nocapture nofree readnone [[P:%.*]]) #[[ATTR1:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.dbg.value(metadata i16* [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()) #[[ATTR3:[0-9]+]], !dbg [[DBG5:![0-9]+]]
|
||||
; IS__CGSCC_NPM-SAME: (i16* nocapture nofree readnone [[P:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.dbg.value(metadata i16* [[P]], metadata [[META3:![0-9]+]], metadata !DIExpression()) #[[ATTR2:[0-9]+]], !dbg [[DBG5:![0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @llvm.dbg.value(metadata %p_t %p, metadata !4, metadata !5), !dbg !6
|
||||
@ -55,12 +55,11 @@ declare void @llvm.dbg.value(metadata, metadata, metadata)
|
||||
!6 = !DILocation(line: 1, column: 1, scope: !3)
|
||||
;.
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR1:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
;.
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { readnone willreturn }
|
||||
;.
|
||||
; IS__TUNIT____: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: !1, isOptimized: false, runtimeVersion: 0, emissionKind: NoDebug)
|
||||
; IS__TUNIT____: [[META1:![0-9]+]] = !DIFile(filename: "test.c", directory: "")
|
||||
|
@ -954,7 +954,7 @@ f:
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR5]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR6:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR6:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR7]] = { nofree nosync nounwind writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8]] = { willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { nounwind }
|
||||
@ -964,7 +964,7 @@ f:
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR4]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR6]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR7]] = { nofree nosync nounwind writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR8]] = { willreturn }
|
||||
@ -976,7 +976,7 @@ f:
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { nofree nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { willreturn }
|
||||
@ -987,7 +987,7 @@ f:
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6]] = { nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree nosync nounwind writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { willreturn }
|
||||
|
@ -854,14 +854,14 @@ define void @test16d(i8 %v, i8** %P) {
|
||||
; IS________OPM: attributes #[[ATTR1:[0-9]+]] = { nofree nosync willreturn }
|
||||
; IS________OPM: attributes #[[ATTR2:[0-9]+]] = { nofree nounwind }
|
||||
; IS________OPM: attributes #[[ATTR3]] = { noreturn }
|
||||
; IS________OPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS________OPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS________OPM: attributes #[[ATTR5]] = { nounwind }
|
||||
;.
|
||||
; IS________NPM: attributes #[[ATTR0:[0-9]+]] = { nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR1:[0-9]+]] = { nofree nosync willreturn }
|
||||
; IS________NPM: attributes #[[ATTR2:[0-9]+]] = { nofree nounwind }
|
||||
; IS________NPM: attributes #[[ATTR3]] = { noreturn }
|
||||
; IS________NPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS________NPM: attributes #[[ATTR6]] = { nounwind }
|
||||
;.
|
||||
|
@ -711,7 +711,7 @@ define void @test17b() {
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nofree nosync willreturn }
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { nofree nounwind }
|
||||
; CHECK: attributes #[[ATTR3]] = { noreturn }
|
||||
; CHECK: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR4:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR5]] = { nounwind }
|
||||
; CHECK: attributes #[[ATTR6]] = { nosync nounwind willreturn }
|
||||
;.
|
||||
|
@ -2551,9 +2551,9 @@ define i32 @h(i32 %i) {
|
||||
@p = global i8 0
|
||||
|
||||
define void @bad_gep() {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@bad_gep
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR9]] {
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR11]] {
|
||||
; NOT_CGSCC_NPM-NEXT: entry:
|
||||
; NOT_CGSCC_NPM-NEXT: [[N:%.*]] = alloca i8, align 1
|
||||
; NOT_CGSCC_NPM-NEXT: [[M:%.*]] = alloca i8, align 1
|
||||
@ -2569,9 +2569,9 @@ define void @bad_gep() {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.lifetime.end.p0i8(i64 noundef 1, i8* noalias nocapture nofree noundef nonnull dereferenceable(1) [[N]]) #[[ATTR14]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@bad_gep
|
||||
; IS__CGSCC____-SAME: () #[[ATTR11]] {
|
||||
; IS__CGSCC____-SAME: () #[[ATTR6]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
; IS__CGSCC____-NEXT: [[N:%.*]] = alloca i8, align 1
|
||||
; IS__CGSCC____-NEXT: [[M:%.*]] = alloca i8, align 1
|
||||
@ -2662,7 +2662,7 @@ declare void @llvm.lifetime.end.p0i8(i64 %0, i8* %1)
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9]] = { nofree nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR10]] = { nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR12:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR12:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR14]] = { willreturn }
|
||||
;.
|
||||
@ -2680,7 +2680,7 @@ declare void @llvm.lifetime.end.p0i8(i64 %0, i8* %1)
|
||||
; IS__CGSCC____: attributes #[[ATTR11]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR12]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR13]] = { nounwind readonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR14:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR14:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR15]] = { nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR16]] = { willreturn }
|
||||
;.
|
||||
|
@ -243,12 +243,12 @@ declare void @dummy(i1) nounwind
|
||||
declare void @llvm.experimental.guard(i1, ...)
|
||||
;.
|
||||
; IS________OPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS________OPM: attributes #[[ATTR1:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS________OPM: attributes #[[ATTR1:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS________OPM: attributes #[[ATTR2]] = { nounwind }
|
||||
; IS________OPM: attributes #[[ATTR3:[0-9]+]] = { nofree nosync willreturn }
|
||||
; IS________OPM: attributes #[[ATTR3:[0-9]+]] = { nocallback nofree nosync willreturn }
|
||||
;.
|
||||
; IS________NPM: attributes #[[ATTR0]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR1:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR1:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR2]] = { nounwind }
|
||||
; IS________NPM: attributes #[[ATTR3:[0-9]+]] = { nofree nosync willreturn }
|
||||
; IS________NPM: attributes #[[ATTR3:[0-9]+]] = { nocallback nofree nosync willreturn }
|
||||
;.
|
||||
|
@ -397,7 +397,7 @@ define void @callerD2() {
|
||||
}
|
||||
|
||||
define void @callerE(i8* %arg) {
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@callerE
|
||||
; CHECK-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; CHECK-NEXT: ret void
|
||||
@ -647,8 +647,8 @@ define void @argmemonky_caller() {
|
||||
; IS__TUNIT____: attributes #[[ATTR1]] = { inaccessiblemem_or_argmemonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR2]] = { readnone }
|
||||
; IS__TUNIT____: attributes #[[ATTR3]] = { argmemonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR4:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR5]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR6]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR8]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
@ -660,8 +660,8 @@ define void @argmemonky_caller() {
|
||||
; IS__CGSCC____: attributes #[[ATTR1]] = { inaccessiblemem_or_argmemonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR2]] = { readnone }
|
||||
; IS__CGSCC____: attributes #[[ATTR3]] = { argmemonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR4:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR6]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { argmemonly nofree nosync nounwind writeonly }
|
||||
|
@ -914,7 +914,7 @@ l2:
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { nounwind ssp uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR8]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9]] = { nofree nosync nounwind readnone willreturn }
|
||||
@ -928,7 +928,7 @@ l2:
|
||||
; IS__CGSCC____: attributes #[[ATTR3]] = { nounwind ssp uwtable }
|
||||
; IS__CGSCC____: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR6:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR6:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR9]] = { nofree nosync nounwind readnone willreturn }
|
||||
|
@ -34,17 +34,11 @@ define void @c2(i32* %q) {
|
||||
}
|
||||
|
||||
define void @c3(i32* %q) {
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@c3
|
||||
; IS__TUNIT____-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT____-NEXT: call void @c2(i32* nofree writeonly [[Q]]) #[[ATTR12:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@c3
|
||||
; IS__CGSCC____-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: call void @c2(i32* nofree writeonly [[Q]]) #[[ATTR18:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@c3
|
||||
; CHECK-SAME: (i32* nofree writeonly [[Q:%.*]]) #[[ATTR1]] {
|
||||
; CHECK-NEXT: call void @c2(i32* nofree writeonly [[Q]]) #[[ATTR16:[0-9]+]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
call void @c2(i32* %q)
|
||||
ret void
|
||||
@ -164,19 +158,12 @@ define i1* @lookup_bit(i32* %q, i32 %bitno) readnone nounwind {
|
||||
}
|
||||
|
||||
define i1 @c7(i32* %q, i32 %bitno) {
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind readonly willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@c7
|
||||
; IS__TUNIT____-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2]] {
|
||||
; IS__TUNIT____-NEXT: [[PTR:%.*]] = call i1* @lookup_bit(i32* noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR18:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: [[VAL:%.*]] = load i1, i1* [[PTR]], align 1
|
||||
; IS__TUNIT____-NEXT: ret i1 [[VAL]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readonly willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@c7
|
||||
; IS__CGSCC____-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2]] {
|
||||
; IS__CGSCC____-NEXT: [[PTR:%.*]] = call i1* @lookup_bit(i32* noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR19:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: [[VAL:%.*]] = load i1, i1* [[PTR]], align 1
|
||||
; IS__CGSCC____-NEXT: ret i1 [[VAL]]
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind readonly willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@c7
|
||||
; CHECK-SAME: (i32* nofree readonly [[Q:%.*]], i32 [[BITNO:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-NEXT: [[PTR:%.*]] = call i1* @lookup_bit(i32* noalias nofree readnone [[Q]], i32 [[BITNO]]) #[[ATTR17:[0-9]+]]
|
||||
; CHECK-NEXT: [[VAL:%.*]] = load i1, i1* [[PTR]], align 1
|
||||
; CHECK-NEXT: ret i1 [[VAL]]
|
||||
;
|
||||
%ptr = call i1* @lookup_bit(i32* %q, i32 %bitno)
|
||||
%val = load i1, i1* %ptr
|
||||
@ -244,13 +231,13 @@ define void @nc2(i32* %p, i32* %q) {
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@nc2
|
||||
; IS__TUNIT____-SAME: (i32* nocapture nofree [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR5]] {
|
||||
; IS__TUNIT____-NEXT: [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree [[P]], i1 noundef false) #[[ATTR10:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree [[P]], i1 noundef false) #[[ATTR18:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@nc2
|
||||
; IS__CGSCC____-SAME: (i32* nocapture nofree align 4 [[P:%.*]], i32* nofree [[Q:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree align 4 [[P]], i1 noundef false) #[[ATTR15:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: [[TMP1:%.*]] = call i32 @nc1(i32* nofree [[Q]], i32* nocapture nofree align 4 [[P]], i1 noundef false) #[[ATTR13:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
%1 = call i32 @nc1(i32* %q, i32* %p, i1 0) ; <i32> [#uses=0]
|
||||
@ -281,7 +268,7 @@ define void @nc4(i8* %p) {
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nounwind
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@nc4
|
||||
; IS__CGSCC____-SAME: (i8* [[P:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: call void @external(i8* readonly [[P]]) #[[ATTR20:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: call void @external(i8* readonly [[P]]) #[[ATTR18:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
call void @external(i8* %p)
|
||||
@ -493,7 +480,7 @@ entry:
|
||||
}
|
||||
|
||||
define void @nocaptureLaunder(i8* %p) {
|
||||
; IS__TUNIT____: Function Attrs: inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn
|
||||
; IS__TUNIT____: Function Attrs: inaccessiblemem_or_argmemonly nofree norecurse nosync nounwind willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@nocaptureLaunder
|
||||
; IS__TUNIT____-SAME: (i8* nocapture nofree [[P:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
@ -501,11 +488,11 @@ define void @nocaptureLaunder(i8* %p) {
|
||||
; IS__TUNIT____-NEXT: store i8 42, i8* [[B]], align 1
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn
|
||||
; IS__CGSCC____: Function Attrs: inaccessiblemem_or_argmemonly nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@nocaptureLaunder
|
||||
; IS__CGSCC____-SAME: (i8* nocapture nofree [[P:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR21:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR19:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: store i8 42, i8* [[B]], align 1
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -517,17 +504,17 @@ entry:
|
||||
|
||||
@g2 = global i8* null
|
||||
define void @captureLaunder(i8* %p) {
|
||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@captureLaunder
|
||||
; IS__TUNIT____-SAME: (i8* nofree [[P:%.*]]) #[[ATTR10]] {
|
||||
; IS__TUNIT____-SAME: (i8* nofree [[P:%.*]]) #[[ATTR5]] {
|
||||
; IS__TUNIT____-NEXT: [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR20]]
|
||||
; IS__TUNIT____-NEXT: store i8* [[B]], i8** @g2, align 8
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@captureLaunder
|
||||
; IS__CGSCC____-SAME: (i8* nofree [[P:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR21]]
|
||||
; IS__CGSCC____-SAME: (i8* nofree [[P:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.launder.invariant.group.p0i8(i8* nofree [[P]]) #[[ATTR19]]
|
||||
; IS__CGSCC____-NEXT: store i8* [[B]], i8** @g2, align 8
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -537,19 +524,19 @@ define void @captureLaunder(i8* %p) {
|
||||
}
|
||||
|
||||
define void @nocaptureStrip(i8* %p) {
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@nocaptureStrip
|
||||
; IS__TUNIT____-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; IS__TUNIT____-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: entry:
|
||||
; IS__TUNIT____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR21:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: store i8 42, i8* [[B]], align 1
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@nocaptureStrip
|
||||
; IS__CGSCC____-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; IS__CGSCC____-SAME: (i8* nocapture nofree writeonly [[P:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: entry:
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR19]]
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR17]]
|
||||
; IS__CGSCC____-NEXT: store i8 42, i8* [[B]], align 1
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -561,17 +548,17 @@ entry:
|
||||
|
||||
@g3 = global i8* null
|
||||
define void @captureStrip(i8* %p) {
|
||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@captureStrip
|
||||
; IS__TUNIT____-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR12]] {
|
||||
; IS__TUNIT____-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR21]]
|
||||
; IS__TUNIT____-NEXT: store i8* [[B]], i8** @g3, align 8
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@captureStrip
|
||||
; IS__CGSCC____-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR12:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR19]]
|
||||
; IS__CGSCC____-SAME: (i8* nofree writeonly [[P:%.*]]) #[[ATTR1]] {
|
||||
; IS__CGSCC____-NEXT: [[B:%.*]] = call i8* @llvm.strip.invariant.group.p0i8(i8* noalias nofree readnone [[P]]) #[[ATTR17]]
|
||||
; IS__CGSCC____-NEXT: store i8* [[B]], i8** @g3, align 8
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -642,7 +629,7 @@ define i1 @nocaptureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x
|
||||
define i1 @captureDereferenceableOrNullICmp(i32* dereferenceable_or_null(4) %x) null_pointer_is_valid {
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@captureDereferenceableOrNullICmp
|
||||
; CHECK-SAME: (i32* nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR13:[0-9]+]] {
|
||||
; CHECK-SAME: (i32* nofree readnone dereferenceable_or_null(4) [[X:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = bitcast i32* [[X]] to i8*
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i8* [[TMP1]], null
|
||||
; CHECK-NEXT: ret i1 [[TMP2]]
|
||||
@ -700,7 +687,7 @@ declare void @val_use(i8 %ptr) readonly nounwind willreturn
|
||||
define void @ptr_uses(i8* %ptr, i8* %wptr) {
|
||||
; CHECK: Function Attrs: nounwind willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@ptr_uses
|
||||
; CHECK-SAME: (i8* [[PTR:%.*]], i8* nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR15:[0-9]+]] {
|
||||
; CHECK-SAME: (i8* [[PTR:%.*]], i8* nocapture nofree noundef nonnull writeonly dereferenceable(1) [[WPTR:%.*]]) #[[ATTR13:[0-9]+]] {
|
||||
; CHECK-NEXT: store i8 0, i8* [[WPTR]], align 1
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
@ -723,16 +710,16 @@ declare i8* @llvm.strip.invariant.group.p0i8(i8*)
|
||||
; IS__TUNIT____: attributes #[[ATTR6]] = { argmemonly nounwind }
|
||||
; IS__TUNIT____: attributes #[[ATTR7]] = { nofree nosync nounwind writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR8]] = { argmemonly nofree norecurse nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR9]] = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR10]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR11]] = { argmemonly nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR12]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR13]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR14:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR15]] = { nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR16:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind speculatable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR18]] = { nofree nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR9]] = { inaccessiblemem_or_argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR10]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR12:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR14:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind speculatable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR15:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR16]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT____: attributes #[[ATTR17]] = { nofree nounwind readnone willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR18]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR19]] = { nounwind }
|
||||
; IS__TUNIT____: attributes #[[ATTR20]] = { willreturn }
|
||||
; IS__TUNIT____: attributes #[[ATTR21]] = { readnone willreturn }
|
||||
@ -746,17 +733,15 @@ declare i8* @llvm.strip.invariant.group.p0i8(i8*)
|
||||
; IS__CGSCC____: attributes #[[ATTR6]] = { argmemonly nounwind }
|
||||
; IS__CGSCC____: attributes #[[ATTR7]] = { nofree nosync nounwind writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR8]] = { argmemonly nofree norecurse nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR9]] = { inaccessiblemem_or_argmemonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR10]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR11]] = { argmemonly nofree nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR12]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR13]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR14:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR15]] = { nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR16:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind speculatable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR18]] = { nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR19]] = { readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR20]] = { nounwind }
|
||||
; IS__CGSCC____: attributes #[[ATTR21]] = { willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR9]] = { inaccessiblemem_or_argmemonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR10]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR11]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR12:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR14:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind speculatable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR15:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR16]] = { nounwind willreturn writeonly }
|
||||
; IS__CGSCC____: attributes #[[ATTR17]] = { readnone willreturn }
|
||||
; IS__CGSCC____: attributes #[[ATTR18]] = { nounwind }
|
||||
; IS__CGSCC____: attributes #[[ATTR19]] = { willreturn }
|
||||
;.
|
||||
|
@ -242,37 +242,26 @@ define void @call_both() #0 {
|
||||
|
||||
; TEST 10 (positive case)
|
||||
; Call intrinsic function
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK: Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK-NEXT: declare float @llvm.floor.f32(float)
|
||||
declare float @llvm.floor.f32(float)
|
||||
|
||||
define void @call_floor(float %a) #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor
|
||||
; NOT_CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor
|
||||
; IS__CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@call_floor
|
||||
; CHECK-SAME: (float [[A:%.*]]) #[[ATTR3]] {
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
tail call float @llvm.floor.f32(float %a)
|
||||
ret void
|
||||
}
|
||||
|
||||
define float @call_floor2(float %a) #0 {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; NOT_CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR11:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret float [[C]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS__CGSCC_NPM-SAME: (float [[A:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR11:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: ret float [[C]]
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@call_floor2
|
||||
; CHECK-SAME: (float [[A:%.*]]) #[[ATTR3]] {
|
||||
; CHECK-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR11:[0-9]+]]
|
||||
; CHECK-NEXT: ret float [[C]]
|
||||
;
|
||||
%c = tail call float @llvm.floor.f32(float %a)
|
||||
ret float %c
|
||||
@ -456,10 +445,10 @@ attributes #2 = { nobuiltin nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5:[0-9]+]] = { nofree noinline nounwind readnone uwtable }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7]] = { nofree nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR8:[0-9]+]] = { nobuiltin nofree nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR10:[0-9]+]] = { nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR11]] = { readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR12]] = { willreturn }
|
||||
@ -470,10 +459,10 @@ attributes #2 = { nobuiltin nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4:[0-9]+]] = { nofree noinline nounwind readnone uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8:[0-9]+]] = { nobuiltin nofree nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10:[0-9]+]] = { nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR11]] = { readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR12]] = { willreturn }
|
||||
|
@ -31,26 +31,26 @@ define i8* @test2(i8* nonnull %p) {
|
||||
}
|
||||
|
||||
define i8* @test2A(i1 %c, i8* %ret) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test2A
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; NOT_CGSCC_NPM: A:
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12:[0-9]+]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13:[0-9]+]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
; NOT_CGSCC_NPM: B:
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test2A
|
||||
; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; IS__CGSCC_NPM: A:
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11:[0-9]+]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12:[0-9]+]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
; IS__CGSCC_NPM: B:
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "nonnull"(i8* [[RET]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
;
|
||||
br i1 %c, label %A, label %B
|
||||
@ -63,26 +63,26 @@ B:
|
||||
}
|
||||
|
||||
define i8* @test2B(i1 %c, i8* %ret) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test2B
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR0]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2]] {
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; NOT_CGSCC_NPM: A:
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
; NOT_CGSCC_NPM: B:
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test2B
|
||||
; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-SAME: (i1 [[C:%.*]], i8* nofree nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[RET:%.*]]) #[[ATTR2]] {
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; IS__CGSCC_NPM: A:
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
; IS__CGSCC_NPM: B:
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "dereferenceable"(i8* [[RET]], i32 4) ]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8* [[RET]]
|
||||
;
|
||||
br i1 %c, label %A, label %B
|
||||
@ -141,7 +141,7 @@ define i8* @test3(i1 %c) {
|
||||
define i8* @test4_helper() {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test4_helper
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -156,7 +156,7 @@ define i8* @test4_helper() {
|
||||
define i8* @test4() {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test4
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR2]] {
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR3]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* undef
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -173,7 +173,7 @@ define i8* @test4() {
|
||||
define i8* @test5_helper(i1 %c) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test5_helper
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[C]], label [[REC:%.*]], label [[END:%.*]]
|
||||
; NOT_CGSCC_NPM: rec:
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[END]]
|
||||
@ -200,7 +200,7 @@ end:
|
||||
define i8* @test5(i1 %c) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test5
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR2]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i1 [[C:%.*]]) #[[ATTR3]] {
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* null
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -217,7 +217,7 @@ define i8* @test6a() {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: noreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test6a
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: entry:
|
||||
; NOT_CGSCC_NPM-NEXT: [[RET:%.*]] = call i8* @ret_nonnull()
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[LOOP:%.*]]
|
||||
@ -228,7 +228,7 @@ define i8* @test6a() {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: noreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test6a
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: entry:
|
||||
; IS__CGSCC_NPM-NEXT: [[RET:%.*]] = call i8* @ret_nonnull()
|
||||
; IS__CGSCC_NPM-NEXT: br label [[LOOP:%.*]]
|
||||
@ -315,17 +315,17 @@ define i8* @test9(i8* %a, i64 %n) {
|
||||
; ATTRIBUTOR_OPM: define i8* @test10
|
||||
; ATTRIBUTOR_NPM: define nonnull i8* @test10
|
||||
define i8* @test10(i8* %a, i64 %n) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test10
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]]
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR2]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[B:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 [[N]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8* [[B]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM: Function Attrs: inaccessiblememonly nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test10
|
||||
; IS__CGSCC_NPM-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR0]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11]]
|
||||
; IS__CGSCC_NPM-SAME: (i8* nofree readnone "no-capture-maybe-returned" [[A:%.*]], i64 [[N:%.*]]) #[[ATTR2]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]]
|
||||
; IS__CGSCC_NPM-NEXT: [[B:%.*]] = getelementptr inbounds i8, i8* [[A]], i64 [[N]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8* [[B]]
|
||||
;
|
||||
@ -384,15 +384,15 @@ define void @test13_helper() {
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test13_helper() {
|
||||
; NOT_CGSCC_NPM-NEXT: [[NONNULLPTR:%.*]] = tail call nonnull i8* @ret_nonnull()
|
||||
; NOT_CGSCC_NPM-NEXT: [[MAYBENULLPTR:%.*]] = tail call i8* @unknown()
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR4:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR5:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test13_helper() {
|
||||
; IS__CGSCC_NPM-NEXT: [[NONNULLPTR:%.*]] = tail call nonnull i8* @ret_nonnull()
|
||||
; IS__CGSCC_NPM-NEXT: [[MAYBENULLPTR:%.*]] = tail call i8* @unknown()
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR3:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]]) #[[ATTR4:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @test13(i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]], i8* noalias nocapture nofree readnone [[MAYBENULLPTR]], i8* noalias nocapture nofree nonnull readnone [[NONNULLPTR]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
%nonnullptr = tail call i8* @ret_nonnull()
|
||||
@ -405,18 +405,18 @@ define internal void @test13(i8* %a, i8* %b, i8* %c) {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@test13
|
||||
; NOT_CGSCC_NPM-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@test13
|
||||
; IS__CGSCC_NPM-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-SAME: (i8* noalias nocapture nofree nonnull readnone [[A:%.*]], i8* noalias nocapture nofree readnone [[B:%.*]], i8* noalias nocapture nofree readnone [[C:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[B]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[C]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @use_i8_ptr(i8* %a)
|
||||
@ -443,7 +443,7 @@ define internal i32* @f1(i32* %arg) {
|
||||
; FIXME: missing nonnull It should be nonnull @f1(i32* nonnull readonly %arg)
|
||||
; NOT_CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f1
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: bb:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP:%.*]] = icmp eq i32* [[ARG]], null
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
|
||||
@ -453,11 +453,11 @@ define internal i32* @f1(i32* %arg) {
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
|
||||
; NOT_CGSCC_NPM: bb4:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 1
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR13:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR14:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, i32* [[TMP5B]], i64 -1
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[BB9]]
|
||||
; NOT_CGSCC_NPM: bb6:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR13]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR14]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* [[TMP7]]
|
||||
; NOT_CGSCC_NPM: bb9:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP10:%.*]] = phi i32* [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to i32*), [[BB:%.*]] ]
|
||||
@ -465,7 +465,7 @@ define internal i32* @f1(i32* %arg) {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP:%.*]] = icmp eq i32* [[ARG]], null
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP]], label [[BB9:%.*]], label [[BB1:%.*]]
|
||||
@ -475,11 +475,11 @@ define internal i32* @f1(i32* %arg) {
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[BB6:%.*]], label [[BB4:%.*]]
|
||||
; IS__CGSCC_NPM: bb4:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = getelementptr inbounds i32, i32* [[ARG]], i64 1
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR12:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5B:%.*]] = tail call i32* @f3(i32* nofree nonnull readonly [[TMP5]]) #[[ATTR13:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5C:%.*]] = getelementptr inbounds i32, i32* [[TMP5B]], i64 -1
|
||||
; IS__CGSCC_NPM-NEXT: br label [[BB9]]
|
||||
; IS__CGSCC_NPM: bb6:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR12]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = tail call i32* @f2(i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG]]) #[[ATTR13]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* [[TMP7]]
|
||||
; IS__CGSCC_NPM: bb9:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP10:%.*]] = phi i32* [ [[TMP5C]], [[BB4]] ], [ inttoptr (i64 4 to i32*), [[BB:%.*]] ]
|
||||
@ -513,16 +513,16 @@ bb9: ; preds = %bb4, %bb
|
||||
define internal i32* @f2(i32* %arg) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f2
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-NEXT: bb:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR13]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* [[TMP]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f2
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree nonnull readonly align 4 dereferenceable(4) [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR12]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP:%.*]] = tail call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR13]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* [[TMP]]
|
||||
;
|
||||
bb:
|
||||
@ -534,16 +534,16 @@ define dso_local noalias i32* @f3(i32* %arg) {
|
||||
; FIXME: missing nonnull. It should be nonnull @f3(i32* nonnull readonly %arg)
|
||||
; NOT_CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f3
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-NEXT: bb:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR13]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR14]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* [[TMP]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: argmemonly nofree nosync nounwind readonly
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f3
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readonly [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: bb:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR12]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP:%.*]] = call i32* @f1(i32* nofree readonly [[ARG]]) #[[ATTR13]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* [[TMP]]
|
||||
;
|
||||
bb:
|
||||
@ -577,26 +577,26 @@ declare void @fun3(i8*, i8*, i8*) #1
|
||||
define void @f16(i8* %a, i8 * %b, i8 %c) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f16
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; NOT_CGSCC_NPM: if.then:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
; NOT_CGSCC_NPM: if.else:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f16
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__CGSCC_NPM: if.then:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* nonnull [[B]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
; IS__CGSCC_NPM: if.else:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun2(i8* nonnull [[A]], i8* [[B]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
%cmp = icmp eq i8 %c, 0
|
||||
@ -619,32 +619,32 @@ define void @f17(i8* %a, i8 %c) {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f17
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; NOT_CGSCC_NPM: if.then:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT:%.*]]
|
||||
; NOT_CGSCC_NPM: if.else:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT]]
|
||||
; NOT_CGSCC_NPM: cont:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f17
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp eq i8 [[C]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__CGSCC_NPM: if.then:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT:%.*]]
|
||||
; IS__CGSCC_NPM: if.else:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT]]
|
||||
; IS__CGSCC_NPM: cont:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
%cmp = icmp eq i8 %c, 0
|
||||
@ -673,50 +673,50 @@ cont:
|
||||
define void @f18(i8* %a, i8* %b, i8 %c) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f18
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR7]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[CMP1:%.*]] = icmp eq i8 [[C]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; NOT_CGSCC_NPM: if.then:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT:%.*]]
|
||||
; NOT_CGSCC_NPM: if.else:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT]]
|
||||
; NOT_CGSCC_NPM: cont:
|
||||
; NOT_CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 1
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[CMP2]], label [[CONT_THEN:%.*]], label [[CONT_ELSE:%.*]]
|
||||
; NOT_CGSCC_NPM: cont.then:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT2:%.*]]
|
||||
; NOT_CGSCC_NPM: cont.else:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[CONT2]]
|
||||
; NOT_CGSCC_NPM: cont2:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR7]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f18
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* [[B:%.*]], i8 [[C:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP1:%.*]] = icmp eq i8 [[C]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[CMP1]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__CGSCC_NPM: if.then:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT:%.*]]
|
||||
; IS__CGSCC_NPM: if.else:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT]]
|
||||
; IS__CGSCC_NPM: cont:
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 1
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[CMP2]], label [[CONT_THEN:%.*]], label [[CONT_ELSE:%.*]]
|
||||
; IS__CGSCC_NPM: cont.then:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT2:%.*]]
|
||||
; IS__CGSCC_NPM: cont.else:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun0() #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[CONT2]]
|
||||
; IS__CGSCC_NPM: cont2:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
%cmp1 = icmp eq i8 %c, 0
|
||||
@ -746,32 +746,32 @@ cont2:
|
||||
define void @f19(i8* %a, i8* %b, i8 %c) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@f19
|
||||
; NOT_CGSCC_NPM-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[LOOP_HEADER:%.*]]
|
||||
; NOT_CGSCC_NPM: loop.header:
|
||||
; NOT_CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[CMP2]], label [[LOOP_BODY:%.*]], label [[LOOP_EXIT:%.*]]
|
||||
; NOT_CGSCC_NPM: loop.body:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[LOOP_HEADER]]
|
||||
; NOT_CGSCC_NPM: loop.exit:
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@f19
|
||||
; IS__CGSCC_NPM-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-SAME: (i8* [[A:%.*]], i8* nonnull [[B:%.*]], i8 [[C:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-NEXT: br label [[LOOP_HEADER:%.*]]
|
||||
; IS__CGSCC_NPM: loop.header:
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP2:%.*]] = icmp eq i8 [[C]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[CMP2]], label [[LOOP_BODY:%.*]], label [[LOOP_EXIT:%.*]]
|
||||
; IS__CGSCC_NPM: loop.body:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[LOOP_HEADER]]
|
||||
; IS__CGSCC_NPM: loop.exit:
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @fun1(i8* nonnull [[B]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
br label %loop.header
|
||||
@ -907,13 +907,13 @@ define i8 @parent6(i8* %a, i8* %b) {
|
||||
define i8 @parent7(i8* %a) {
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@parent7
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]]) {
|
||||
; NOT_CGSCC_NPM-NEXT: [[RET:%.*]] = call i8 @use1safecall(i8* nonnull readonly [[A]]) #[[ATTR14:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[RET:%.*]] = call i8 @use1safecall(i8* nonnull readonly [[A]]) #[[ATTR15:[0-9]+]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use1nonnull(i8* nonnull [[A]])
|
||||
; NOT_CGSCC_NPM-NEXT: ret i8 [[RET]]
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@parent7
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]]) {
|
||||
; IS__CGSCC_NPM-NEXT: [[RET:%.*]] = call i8 @use1safecall(i8* nonnull readonly [[A]]) #[[ATTR13:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: [[RET:%.*]] = call i8 @use1safecall(i8* nonnull readonly [[A]]) #[[ATTR14:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use1nonnull(i8* nonnull [[A]])
|
||||
; IS__CGSCC_NPM-NEXT: ret i8 [[RET]]
|
||||
;
|
||||
@ -931,7 +931,7 @@ declare i32 @esfp(...)
|
||||
define i1 @parent8(i8* %a, i8* %bogus1, i8* %b) personality i8* bitcast (i32 (...)* @esfp to i8*){
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@parent8
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR4]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR5]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
|
||||
; NOT_CGSCC_NPM-NEXT: entry:
|
||||
; NOT_CGSCC_NPM-NEXT: invoke void @use2nonnull(i8* nonnull [[A]], i8* nonnull [[B]])
|
||||
; NOT_CGSCC_NPM-NEXT: to label [[CONT:%.*]] unwind label [[EXC:%.*]]
|
||||
@ -944,7 +944,7 @@ define i1 @parent8(i8* %a, i8* %bogus1, i8* %b) personality i8* bitcast (i32 (..
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@parent8
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR3]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
|
||||
; IS__CGSCC_NPM-SAME: (i8* nonnull [[A:%.*]], i8* nocapture nofree readnone [[BOGUS1:%.*]], i8* nonnull [[B:%.*]]) #[[ATTR4]] personality i8* bitcast (i32 (...)* @esfp to i8*) {
|
||||
; IS__CGSCC_NPM-NEXT: entry:
|
||||
; IS__CGSCC_NPM-NEXT: invoke void @use2nonnull(i8* nonnull [[A]], i8* nonnull [[B]])
|
||||
; IS__CGSCC_NPM-NEXT: to label [[CONT:%.*]] unwind label [[EXC:%.*]]
|
||||
@ -985,13 +985,13 @@ define i32* @gep1_no_null_opt(i32* %p) #0 {
|
||||
; Should't be able to derive nonnull based on gep.
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@gep1_no_null_opt
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[Q:%.*]] = getelementptr inbounds i32, i32* [[P]], i32 1
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32* [[Q]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@gep1_no_null_opt
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[P:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[Q:%.*]] = getelementptr inbounds i32, i32* [[P]], i32 1
|
||||
; IS__CGSCC_NPM-NEXT: ret i32* [[Q]]
|
||||
;
|
||||
@ -1044,14 +1044,14 @@ declare void @use_i32_ptr(i32* readnone nocapture) nounwind
|
||||
define internal void @called_by_weak(i32* %a) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@called_by_weak
|
||||
; NOT_CGSCC_NPM-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@called_by_weak
|
||||
; IS__CGSCC_NPM-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-SAME: (i32* noalias nocapture nonnull readnone [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @use_i32_ptr(i32* %a)
|
||||
@ -1063,12 +1063,12 @@ define weak_odr void @weak_caller(i32* nonnull %a) {
|
||||
;
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@weak_caller
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]]) {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@weak_caller
|
||||
; IS__CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]]) {
|
||||
; IS__CGSCC_NPM-NEXT: call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @called_by_weak(i32* noalias nocapture nonnull readnone [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @called_by_weak(i32* %a)
|
||||
@ -1079,14 +1079,14 @@ define weak_odr void @weak_caller(i32* nonnull %a) {
|
||||
define internal void @control(i32* dereferenceable(4) %a) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@control
|
||||
; NOT_CGSCC_NPM-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR5]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@control
|
||||
; IS__CGSCC_NPM-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-SAME: (i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A:%.*]]) #[[ATTR4]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @use_i32_ptr(i32* %a)
|
||||
@ -1096,13 +1096,13 @@ define internal void @control(i32* dereferenceable(4) %a) {
|
||||
define internal void @naked(i32* dereferenceable(4) %a) naked {
|
||||
; NOT_CGSCC_NPM: Function Attrs: naked
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@naked
|
||||
; NOT_CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* [[A]])
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: naked
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@naked
|
||||
; IS__CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* [[A]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
@ -1114,13 +1114,13 @@ define internal void @optnone(i32* dereferenceable(4) %a) optnone noinline {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: noinline optnone
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@optnone
|
||||
; NOT_CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* [[A]])
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: noinline optnone
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@optnone
|
||||
; IS__CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* dereferenceable(4) [[A:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i32_ptr(i32* [[A]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
@ -1131,14 +1131,14 @@ define void @make_live(i32* nonnull dereferenceable(8) %a) {
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@make_live
|
||||
; NOT_CGSCC_NPM-SAME: (i32* noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @naked(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
|
||||
; NOT_CGSCC_NPM-NEXT: call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @optnone(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@make_live
|
||||
; IS__CGSCC_NPM-SAME: (i32* noundef nonnull align 16 dereferenceable(8) [[A:%.*]]) {
|
||||
; IS__CGSCC_NPM-NEXT: call void @naked(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
|
||||
; IS__CGSCC_NPM-NEXT: call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @control(i32* noalias nocapture noundef nonnull readnone align 16 dereferenceable(8) [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @optnone(i32* noundef nonnull align 16 dereferenceable(8) [[A]])
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
@ -1161,48 +1161,48 @@ define i32 @nonnull_exec_ctx_1(i32* %a, i32 %b) {
|
||||
;
|
||||
; IS________OPM: Function Attrs: nounwind
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
|
||||
; IS________OPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR4]] {
|
||||
; IS________OPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS________OPM-NEXT: en:
|
||||
; IS________OPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS________OPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS________OPM: ex:
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS________OPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS________OPM: hd:
|
||||
; IS________OPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS________OPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR4]]
|
||||
; IS________OPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR5]]
|
||||
; IS________OPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
; IS________OPM-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
|
||||
; IS________OPM-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
|
||||
; IS__TUNIT_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__TUNIT_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
|
||||
; IS__TUNIT_NPM-NEXT: en:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__TUNIT_NPM: ex:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__TUNIT_NPM: hd:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__TUNIT_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR6]]
|
||||
; IS__TUNIT_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1
|
||||
; IS__CGSCC_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: en:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__CGSCC_NPM: ex:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__CGSCC_NPM: hd:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
|
||||
@ -1227,16 +1227,16 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
|
||||
;
|
||||
; IS________OPM: Function Attrs: nounwind
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
|
||||
; IS________OPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR4]] {
|
||||
; IS________OPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS________OPM-NEXT: en:
|
||||
; IS________OPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS________OPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS________OPM: ex:
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS________OPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS________OPM: hd:
|
||||
; IS________OPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS________OPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR4]]
|
||||
; IS________OPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR5]]
|
||||
; IS________OPM-NEXT: br label [[HD2]]
|
||||
; IS________OPM: hd2:
|
||||
; IS________OPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
@ -1245,16 +1245,16 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
|
||||
; IS__TUNIT_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__TUNIT_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
|
||||
; IS__TUNIT_NPM-NEXT: en:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__TUNIT_NPM: ex:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__TUNIT_NPM: hd:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__TUNIT_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR6]]
|
||||
; IS__TUNIT_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: br label [[HD2]]
|
||||
; IS__TUNIT_NPM: hd2:
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
@ -1263,16 +1263,16 @@ define i32 @nonnull_exec_ctx_1b(i32* %a, i32 %b) {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_1b
|
||||
; IS__CGSCC_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: en:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__CGSCC_NPM: ex:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__CGSCC_NPM: hd:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR5]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* [[A]]) #[[ATTR6]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[HD2]]
|
||||
; IS__CGSCC_NPM: hd2:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
@ -1302,32 +1302,32 @@ define i32 @nonnull_exec_ctx_2(i32* %a, i32 %b) willreturn nounwind {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
|
||||
; NOT_CGSCC_NPM-NEXT: en:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; NOT_CGSCC_NPM: ex:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; NOT_CGSCC_NPM: hd:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2
|
||||
; IS__CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: en:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__CGSCC_NPM: ex:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__CGSCC_NPM: hd:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP9:%.*]] = icmp eq i32 [[TMP8]], [[B]]
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP9]], label [[EX]], label [[HD]]
|
||||
@ -1352,16 +1352,16 @@ define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind {
|
||||
;
|
||||
; NOT_CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; NOT_CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR7]] {
|
||||
; NOT_CGSCC_NPM-NEXT: en:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; NOT_CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; NOT_CGSCC_NPM: ex:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; NOT_CGSCC_NPM: hd:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: br label [[HD2]]
|
||||
; NOT_CGSCC_NPM: hd2:
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
@ -1370,16 +1370,16 @@ define i32 @nonnull_exec_ctx_2b(i32* %a, i32 %b) willreturn nounwind {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nounwind willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_exec_ctx_2b
|
||||
; IS__CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32* nonnull [[A:%.*]], i32 [[B:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: en:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP3:%.*]] = icmp eq i32 [[B]], 0
|
||||
; IS__CGSCC_NPM-NEXT: br i1 [[TMP3]], label [[EX:%.*]], label [[HD:%.*]]
|
||||
; IS__CGSCC_NPM: ex:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP5:%.*]] = tail call i32 @g(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i32 [[TMP5]]
|
||||
; IS__CGSCC_NPM: hd:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP7:%.*]] = phi i32 [ [[TMP8:%.*]], [[HD2:%.*]] ], [ 0, [[EN:%.*]] ]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: tail call void @h(i32* nonnull [[A]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: br label [[HD2]]
|
||||
; IS__CGSCC_NPM: hd2:
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP8]] = add nuw i32 [[TMP7]], 1
|
||||
@ -1523,8 +1523,8 @@ declare i8* @strrchr(i8* %0, i32 %1) nofree nounwind readonly willreturn
|
||||
define i8* @mybasename(i8* nofree readonly %str) {
|
||||
; NOT_CGSCC_NPM: Function Attrs: nofree nounwind readonly willreturn
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@mybasename
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nofree readonly [[STR:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[CALL:%.*]] = call i8* @strrchr(i8* nofree readonly [[STR]], i32 noundef 47) #[[ATTR14]]
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nofree readonly [[STR:%.*]]) #[[ATTR12:[0-9]+]] {
|
||||
; NOT_CGSCC_NPM-NEXT: [[CALL:%.*]] = call i8* @strrchr(i8* nofree readonly [[STR]], i32 noundef 47) #[[ATTR15]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TOBOOL:%.*]] = icmp ne i8* [[CALL]], null
|
||||
; NOT_CGSCC_NPM-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, i8* [[CALL]], i64 1
|
||||
; NOT_CGSCC_NPM-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], i8* [[ADD_PTR]], i8* [[STR]]
|
||||
@ -1532,8 +1532,8 @@ define i8* @mybasename(i8* nofree readonly %str) {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree nounwind readonly willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@mybasename
|
||||
; IS__CGSCC_NPM-SAME: (i8* nofree readonly [[STR:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i8* @strrchr(i8* nofree readonly [[STR]], i32 noundef 47) #[[ATTR13]]
|
||||
; IS__CGSCC_NPM-SAME: (i8* nofree readonly [[STR:%.*]]) #[[ATTR11:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i8* @strrchr(i8* nofree readonly [[STR]], i32 noundef 47) #[[ATTR14]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TOBOOL:%.*]] = icmp ne i8* [[CALL]], null
|
||||
; IS__CGSCC_NPM-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i8, i8* [[CALL]], i64 1
|
||||
; IS__CGSCC_NPM-NEXT: [[COND:%.*]] = select i1 [[TOBOOL]], i8* [[ADD_PTR]], i8* [[STR]]
|
||||
@ -1556,15 +1556,15 @@ define void @nonnull_assume_pos(i8* %arg) {
|
||||
;
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_assume_pos
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nocapture nofree nonnull readnone [[ARG:%.*]]) {
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "nonnull"(i8* [[ARG]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR13]] [ "nonnull"(i8* [[ARG]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP1:%.*]] = call i8* @unknown()
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_assume_pos
|
||||
; IS__CGSCC_NPM-SAME: (i8* nocapture nofree nonnull readnone [[ARG:%.*]]) {
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR11]] [ "nonnull"(i8* [[ARG]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) #[[ATTR12]] [ "nonnull"(i8* [[ARG]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP1:%.*]] = call i8* @unknown()
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
@ -1590,25 +1590,25 @@ define void @nonnull_assume_neg(i8* %arg) {
|
||||
; NOT_CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_assume_neg
|
||||
; NOT_CGSCC_NPM-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) {
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP1:%.*]] = call i8* @unknown()
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: [[TMP2:%.*]] = call i8* @unknown()
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; NOT_CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR5]]
|
||||
; NOT_CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@nonnull_assume_neg
|
||||
; IS__CGSCC_NPM-SAME: (i8* nocapture nofree readnone [[ARG:%.*]]) {
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP1:%.*]] = call i8* @unknown()
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree readnone [[ARG]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: [[TMP2:%.*]] = call i8* @unknown()
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @llvm.assume(i1 noundef true) [ "nonnull"(i8* [[ARG]]) ]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR3]]
|
||||
; IS__CGSCC_NPM-NEXT: call void @use_i8_ptr_ret(i8* noalias nocapture nofree nonnull readnone [[ARG]]) #[[ATTR4]]
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call i8* @unknown()
|
||||
@ -1661,34 +1661,36 @@ declare void @nonnull_callee(i8* nonnull %p)
|
||||
attributes #0 = { null_pointer_is_valid }
|
||||
attributes #1 = { nounwind willreturn}
|
||||
;.
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR0]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR0:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR2]] = { nofree nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { noreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5]] = { argmemonly nofree nosync nounwind readonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6]] = { nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9]] = { naked }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR10]] = { noinline optnone }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR11]] = { nofree nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR12]] = { willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR13]] = { nofree nosync nounwind readonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR14]] = { readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR2]] = { inaccessiblememonly nofree norecurse nosync nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR3]] = { nofree nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR4]] = { noreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR5]] = { nounwind }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR6]] = { argmemonly nofree nosync nounwind readonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR7]] = { nounwind willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR8:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR9]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR10]] = { naked }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR11]] = { noinline optnone }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR12]] = { nofree nounwind readonly willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR13]] = { willreturn }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR14]] = { nofree nosync nounwind readonly }
|
||||
; NOT_CGSCC_NPM: attributes #[[ATTR15]] = { readonly willreturn }
|
||||
;.
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { noreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { argmemonly nofree nosync nounwind readonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { naked }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { noinline optnone }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { nofree nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR11]] = { willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR12]] = { nofree nosync nounwind readonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR13]] = { readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { inaccessiblememonly nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { noreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { nounwind }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { argmemonly nofree nosync nounwind readonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6]] = { nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7:[0-9]+]] = { nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { nofree norecurse nosync nounwind null_pointer_is_valid readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { naked }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { noinline optnone }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR11]] = { nofree nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR12]] = { willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR13]] = { nofree nosync nounwind readonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR14]] = { readonly willreturn }
|
||||
;.
|
||||
|
@ -444,7 +444,7 @@ declare float @llvm.cos(float %val) readnone
|
||||
; TEST 19 - positive, readnone & non-convergent intrinsic.
|
||||
|
||||
define i32 @cos_test(float %x) {
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@cos_test
|
||||
; CHECK-SAME: (float [[X:%.*]]) #[[ATTR15:[0-9]+]] {
|
||||
; CHECK-NEXT: ret i32 4
|
||||
@ -454,13 +454,13 @@ define i32 @cos_test(float %x) {
|
||||
}
|
||||
|
||||
define float @cos_test2(float %x) {
|
||||
; NOT_CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; NOT_CGSCC_OPM-LABEL: define {{[^@]+}}@cos_test2
|
||||
; NOT_CGSCC_OPM-SAME: (float [[X:%.*]]) #[[ATTR15]] {
|
||||
; NOT_CGSCC_OPM-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR21:[0-9]+]]
|
||||
; NOT_CGSCC_OPM-NEXT: ret float [[C]]
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@cos_test2
|
||||
; IS__CGSCC_OPM-SAME: (float [[X:%.*]]) #[[ATTR15]] {
|
||||
; IS__CGSCC_OPM-NEXT: [[C:%.*]] = call float @llvm.cos.f32(float [[X]]) #[[ATTR22:[0-9]+]]
|
||||
@ -485,9 +485,9 @@ define float @cos_test2(float %x) {
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { convergent readnone }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR13]] = { readnone }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR14]] = { nounwind }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR15]] = { nofree nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR15]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR16:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR18]] = { nofree nounwind }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR19]] = { willreturn }
|
||||
; NOT_CGSCC_OPM: attributes #[[ATTR20]] = { willreturn writeonly }
|
||||
@ -508,9 +508,9 @@ define float @cos_test2(float %x) {
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { convergent readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR15]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR15]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR16:[0-9]+]] = { argmemonly nofree nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR17:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR18]] = { nofree nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR19]] = { nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR20]] = { willreturn }
|
||||
|
@ -288,7 +288,7 @@ attributes #2 = { nounwind }
|
||||
;.
|
||||
; CHECK: attributes #[[ATTR0:[0-9]+]] = { nounwind uwtable }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { alwaysinline nofree norecurse nounwind uwtable }
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
;.
|
||||
; CHECK: [[META0:![0-9]+]] = !{i32 7, !"openmp", i32 50}
|
||||
; CHECK: [[META1:![0-9]+]] = !{!2}
|
||||
|
@ -129,10 +129,10 @@ declare void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32>%val, <4 x i32*>, i32,
|
||||
; CHECK-NOT: readnone
|
||||
; CHECK-NOT: readonly
|
||||
define void @test9(<4 x i32*> %ptrs, <4 x i32>%val) {
|
||||
; CHECK: Function Attrs: nofree nosync nounwind willreturn writeonly
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@test9
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32> [[VAL]], <4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR11:[0-9]+]]
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]], <4 x i32> [[VAL:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32> [[VAL]], <4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>) #[[ATTR12:[0-9]+]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
call void @llvm.masked.scatter.v4i32.v4p0i32(<4 x i32>%val, <4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>)
|
||||
@ -142,10 +142,10 @@ define void @test9(<4 x i32*> %ptrs, <4 x i32>%val) {
|
||||
; CHECK: declare <4 x i32> @llvm.masked.gather
|
||||
declare <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*>, i32, <4 x i1>, <4 x i32>)
|
||||
define <4 x i32> @test10(<4 x i32*> %ptrs) {
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readonly willreturn
|
||||
; CHECK: Function Attrs: nofree norecurse nosync nounwind readonly willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@test10
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR12:[0-9]+]]
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> [[PTRS]], i32 noundef 4, <4 x i1> noundef <i1 true, i1 false, i1 true, i1 false>, <4 x i32> undef) #[[ATTR13:[0-9]+]]
|
||||
; CHECK-NEXT: ret <4 x i32> [[RES]]
|
||||
;
|
||||
%res = call <4 x i32> @llvm.masked.gather.v4i32.v4p0i32(<4 x i32*> %ptrs, i32 4, <4 x i1><i1 true, i1 false, i1 true, i1 false>, <4 x i32>undef)
|
||||
@ -157,8 +157,8 @@ declare <4 x i32> @test11_1(<4 x i32*>) argmemonly nounwind readonly
|
||||
define <4 x i32> @test11_2(<4 x i32*> %ptrs) {
|
||||
; CHECK: Function Attrs: argmemonly nounwind readonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@test11_2
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @test11_1(<4 x i32*> [[PTRS]]) #[[ATTR10:[0-9]+]]
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @test11_1(<4 x i32*> [[PTRS]]) #[[ATTR11:[0-9]+]]
|
||||
; CHECK-NEXT: ret <4 x i32> [[RES]]
|
||||
;
|
||||
%res = call <4 x i32> @test11_1(<4 x i32*> %ptrs)
|
||||
@ -170,8 +170,8 @@ declare <4 x i32> @test12_1(<4 x i32*>) argmemonly nounwind
|
||||
define <4 x i32> @test12_2(<4 x i32*> %ptrs) {
|
||||
; CHECK: Function Attrs: argmemonly nounwind
|
||||
; CHECK-LABEL: define {{[^@]+}}@test12_2
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @test12_1(<4 x i32*> [[PTRS]]) #[[ATTR13:[0-9]+]]
|
||||
; CHECK-SAME: (<4 x i32*> [[PTRS:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; CHECK-NEXT: [[RES:%.*]] = call <4 x i32> @test12_1(<4 x i32*> [[PTRS]]) #[[ATTR14:[0-9]+]]
|
||||
; CHECK-NEXT: ret <4 x i32> [[RES]]
|
||||
;
|
||||
%res = call <4 x i32> @test12_1(<4 x i32*> %ptrs)
|
||||
@ -181,7 +181,7 @@ define <4 x i32> @test12_2(<4 x i32*> %ptrs) {
|
||||
define i32 @volatile_load(i32* %p) {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nounwind willreturn
|
||||
; CHECK-LABEL: define {{[^@]+}}@volatile_load
|
||||
; CHECK-SAME: (i32* nofree noundef align 4 [[P:%.*]]) #[[ATTR8:[0-9]+]] {
|
||||
; CHECK-SAME: (i32* nofree noundef align 4 [[P:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; CHECK-NEXT: [[LOAD:%.*]] = load volatile i32, i32* [[P]], align 4
|
||||
; CHECK-NEXT: ret i32 [[LOAD]]
|
||||
;
|
||||
@ -259,7 +259,7 @@ define void @byval_not_readonly_2(i8* byval(i8) %written) readonly {
|
||||
define void @byval_not_readnone_1(i8* byval(i8) %written) readnone {
|
||||
; CHECK: Function Attrs: readnone
|
||||
; CHECK-LABEL: define {{[^@]+}}@byval_not_readnone_1
|
||||
; CHECK-SAME: (i8* noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; CHECK-SAME: (i8* noalias nonnull byval(i8) dereferenceable(1) [[WRITTEN:%.*]]) #[[ATTR10:[0-9]+]] {
|
||||
; CHECK-NEXT: call void @escape_i8(i8* nonnull dereferenceable(1) [[WRITTEN]])
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
@ -294,14 +294,14 @@ define void @testbyval(i8* %read_only) {
|
||||
; IS__TUNIT____-SAME: (i8* nocapture readonly [[READ_ONLY:%.*]]) {
|
||||
; IS__TUNIT____-NEXT: call void @byval_not_readonly_1(i8* nocapture readonly byval(i8) [[READ_ONLY]]) #[[ATTR2]]
|
||||
; IS__TUNIT____-NEXT: call void @byval_not_readnone_1(i8* noalias nocapture readnone byval(i8) [[READ_ONLY]])
|
||||
; IS__TUNIT____-NEXT: call void @byval_no_fnarg(i8* nocapture nofree readonly byval(i8) [[READ_ONLY]]) #[[ATTR14:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: call void @byval_no_fnarg(i8* nocapture nofree readonly byval(i8) [[READ_ONLY]]) #[[ATTR15:[0-9]+]]
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@testbyval
|
||||
; IS__CGSCC____-SAME: (i8* nocapture noundef nonnull readonly dereferenceable(1) [[READ_ONLY:%.*]]) {
|
||||
; IS__CGSCC____-NEXT: call void @byval_not_readonly_1(i8* noalias nocapture noundef nonnull readonly byval(i8) dereferenceable(1) [[READ_ONLY]]) #[[ATTR2]]
|
||||
; IS__CGSCC____-NEXT: call void @byval_not_readnone_1(i8* noalias nocapture noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]])
|
||||
; IS__CGSCC____-NEXT: call void @byval_no_fnarg(i8* noalias nocapture nofree noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]]) #[[ATTR14:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: call void @byval_no_fnarg(i8* noalias nocapture nofree noundef nonnull readnone byval(i8) dereferenceable(1) [[READ_ONLY]]) #[[ATTR15:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
call void @byval_not_readonly_1(i8* byval(i8) %read_only)
|
||||
@ -320,9 +320,9 @@ declare void @val_use(i8 %ptr) readonly nounwind
|
||||
define void @ptr_uses(i8* %ptr) {
|
||||
; CHECK: Function Attrs: nounwind readonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@ptr_uses
|
||||
; CHECK-SAME: (i8* nocapture readonly [[PTR:%.*]]) #[[ATTR10]] {
|
||||
; CHECK-NEXT: [[CALL_PTR:%.*]] = call i8* @maybe_returned_ptr(i8* readonly [[PTR]]) #[[ATTR10]]
|
||||
; CHECK-NEXT: [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(i8* readonly [[CALL_PTR]]) #[[ATTR10]]
|
||||
; CHECK-SAME: (i8* nocapture readonly [[PTR:%.*]]) #[[ATTR11]] {
|
||||
; CHECK-NEXT: [[CALL_PTR:%.*]] = call i8* @maybe_returned_ptr(i8* readonly [[PTR]]) #[[ATTR11]]
|
||||
; CHECK-NEXT: [[CALL_VAL:%.*]] = call i8 @maybe_returned_val(i8* readonly [[CALL_PTR]]) #[[ATTR11]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
%call_ptr = call i8* @maybe_returned_ptr(i8* %ptr)
|
||||
@ -375,15 +375,16 @@ define i32 @read_only_constant_mem() {
|
||||
; CHECK: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #[[ATTR2]] = { readonly }
|
||||
; CHECK: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #[[ATTR4]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #[[ATTR5]] = { nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #[[ATTR6]] = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #[[ATTR7]] = { argmemonly nounwind }
|
||||
; CHECK: attributes #[[ATTR8]] = { argmemonly nofree norecurse nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR9]] = { readnone }
|
||||
; CHECK: attributes #[[ATTR10]] = { nounwind readonly }
|
||||
; CHECK: attributes #[[ATTR11]] = { willreturn writeonly }
|
||||
; CHECK: attributes #[[ATTR12]] = { readonly willreturn }
|
||||
; CHECK: attributes #[[ATTR13]] = { nounwind }
|
||||
; CHECK: attributes #[[ATTR14:[0-9]+]] = { nounwind writeonly }
|
||||
; CHECK: attributes #[[ATTR4:[0-9]+]] = { nocallback nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #[[ATTR6]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; CHECK: attributes #[[ATTR7]] = { argmemonly nounwind readonly }
|
||||
; CHECK: attributes #[[ATTR8]] = { argmemonly nounwind }
|
||||
; CHECK: attributes #[[ATTR9]] = { argmemonly nofree norecurse nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR10]] = { readnone }
|
||||
; CHECK: attributes #[[ATTR11]] = { nounwind readonly }
|
||||
; CHECK: attributes #[[ATTR12]] = { willreturn writeonly }
|
||||
; CHECK: attributes #[[ATTR13]] = { readonly willreturn }
|
||||
; CHECK: attributes #[[ATTR14]] = { nounwind }
|
||||
; CHECK: attributes #[[ATTR15:[0-9]+]] = { nounwind writeonly }
|
||||
;.
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -367,13 +367,13 @@ define i32* @complicated_args_inalloca(i32* %arg) {
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_inalloca
|
||||
; IS__TUNIT_OPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR6:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR8:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_inalloca
|
||||
; IS__TUNIT_NPM-SAME: (i32* nofree readnone "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR5:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call nonnull dereferenceable(4) i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR7:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -394,24 +394,24 @@ define internal i32* @test_preallocated(i32* preallocated(i32) %a) {
|
||||
ret i32* %a
|
||||
}
|
||||
define i32* @complicated_args_preallocated() {
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_preallocated
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR7:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR6]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR9:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR8]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_OPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_preallocated
|
||||
; IS__TUNIT_NPM-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR6:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR5]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_NPM-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR8:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call noundef nonnull align 4294967296 dereferenceable(4) i32* @test_preallocated(i32* noalias nocapture nofree noundef writeonly preallocated(i32) align 4294967296 null) #[[ATTR7]] [ "preallocated"(token [[C]]) ]
|
||||
; IS__TUNIT_NPM-NEXT: ret i32* [[CALL]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_preallocated
|
||||
; IS__CGSCC____-SAME: () #[[ATTR0:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR7:[0-9]+]]
|
||||
; IS__CGSCC____-SAME: () #[[ATTR2:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[C:%.*]] = call token @llvm.call.preallocated.setup(i32 noundef 1) #[[ATTR9:[0-9]+]]
|
||||
; IS__CGSCC____-NEXT: ret i32* null
|
||||
;
|
||||
%c = call token @llvm.call.preallocated.setup(i32 1)
|
||||
@ -423,7 +423,7 @@ define internal void @test_sret(%struct.X* sret(%struct.X) %a, %struct.X** %b) {
|
||||
;
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@test_sret
|
||||
; CHECK-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2:[0-9]+]] {
|
||||
; CHECK-SAME: (%struct.X* noalias nofree noundef nonnull writeonly sret([[STRUCT_X:%.*]]) align 4294967296 dereferenceable(8) [[A:%.*]], %struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; CHECK-NEXT: store %struct.X* [[A]], %struct.X** [[B]], align 8
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
@ -436,19 +436,19 @@ define void @complicated_args_sret(%struct.X** %b) {
|
||||
;
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_sret
|
||||
; IS__TUNIT_OPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] {
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR8:[0-9]+]]
|
||||
; IS__TUNIT_OPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] {
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR10:[0-9]+]]
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_sret
|
||||
; IS__TUNIT_NPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR2]] {
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR7:[0-9]+]]
|
||||
; IS__TUNIT_NPM-SAME: (%struct.X** nocapture nofree writeonly [[B:%.*]]) #[[ATTR3]] {
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret([[STRUCT_X:%.*]]) align 4294967296 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR9:[0-9]+]]
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@complicated_args_sret
|
||||
; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2]] {
|
||||
; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR3]] {
|
||||
; IS__CGSCC____-NEXT: unreachable
|
||||
;
|
||||
call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b)
|
||||
@ -477,14 +477,14 @@ define %struct.X* @complicated_args_nest() {
|
||||
define internal void @test_byval(%struct.X* byval(%struct.X) %a) {
|
||||
; IS________OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@test_byval
|
||||
; IS________OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR2]] {
|
||||
; IS________OPM-SAME: (%struct.X* noalias nocapture nofree noundef nonnull writeonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR3]] {
|
||||
; IS________OPM-NEXT: [[G0:%.*]] = getelementptr [[STRUCT_X]], %struct.X* [[A]], i32 0, i32 0
|
||||
; IS________OPM-NEXT: store i8* null, i8** [[G0]], align 8
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@test_byval
|
||||
; IS________NPM-SAME: (i8* [[TMP0:%.*]]) #[[ATTR2]] {
|
||||
; IS________NPM-SAME: (i8* [[TMP0:%.*]]) #[[ATTR3]] {
|
||||
; IS________NPM-NEXT: [[A_PRIV:%.*]] = alloca [[STRUCT_X:%.*]], align 8
|
||||
; IS________NPM-NEXT: [[A_PRIV_CAST:%.*]] = bitcast %struct.X* [[A_PRIV]] to i8**
|
||||
; IS________NPM-NEXT: store i8* [[TMP0]], i8** [[A_PRIV_CAST]], align 8
|
||||
@ -499,27 +499,27 @@ define internal void @test_byval(%struct.X* byval(%struct.X) %a) {
|
||||
define void @complicated_args_byval() {
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_byval
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_byval(%struct.X* nocapture nofree noundef nonnull readonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR8]]
|
||||
; IS__TUNIT_OPM-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: call void @test_byval(%struct.X* nocapture nofree noundef nonnull readonly byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR10]]
|
||||
; IS__TUNIT_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_byval
|
||||
; IS__TUNIT_NPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[S_CAST:%.*]] = bitcast %struct.X* @S to i8**
|
||||
; IS__TUNIT_NPM-NEXT: [[TMP1:%.*]] = load i8*, i8** [[S_CAST]], align 8
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_byval(i8* [[TMP1]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: call void @test_byval(i8* [[TMP1]]) #[[ATTR9]]
|
||||
; IS__TUNIT_NPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_byval
|
||||
; IS__CGSCC_OPM-SAME: () #[[ATTR1]] {
|
||||
; IS__CGSCC_OPM-NEXT: call void @test_byval(%struct.X* noalias nocapture nofree noundef nonnull readnone byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR8:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: call void @test_byval(%struct.X* noalias nocapture nofree noundef nonnull readnone byval([[STRUCT_X:%.*]]) align 8 dereferenceable(8) @S) #[[ATTR10:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readonly willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_byval
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC_NPM-NEXT: ret void
|
||||
;
|
||||
call void @test_byval(%struct.X* byval(%struct.X) @S)
|
||||
@ -579,7 +579,7 @@ define i8* @complicated_args_byval2() {
|
||||
define void @fixpoint_changed(i32* %p) {
|
||||
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind writeonly
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@fixpoint_changed
|
||||
; IS__TUNIT_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: entry:
|
||||
; IS__TUNIT_OPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS__TUNIT_OPM: for.cond:
|
||||
@ -602,7 +602,7 @@ define void @fixpoint_changed(i32* %p) {
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@fixpoint_changed
|
||||
; IS________NPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR2]] {
|
||||
; IS________NPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
; IS________NPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS________NPM: for.cond:
|
||||
@ -625,7 +625,7 @@ define void @fixpoint_changed(i32* %p) {
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: argmemonly nofree norecurse nosync nounwind writeonly
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@fixpoint_changed
|
||||
; IS__CGSCC_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR3:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-SAME: (i32* nocapture nofree writeonly [[P:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC_OPM-NEXT: entry:
|
||||
; IS__CGSCC_OPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS__CGSCC_OPM: for.cond:
|
||||
@ -740,13 +740,13 @@ define internal i8 @callee(i8 %a) {
|
||||
define void @user_as3() {
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@user_as3
|
||||
; IS__TUNIT____-SAME: () #[[ATTR3:[0-9]+]] {
|
||||
; IS__TUNIT____-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; IS__TUNIT____-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@user_as3
|
||||
; IS__CGSCC____-SAME: () #[[ATTR4:[0-9]+]] {
|
||||
; IS__CGSCC____-SAME: () #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: store i32 0, i32 addrspace(3)* @ConstAS3Ptr, align 4
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -757,13 +757,13 @@ define void @user_as3() {
|
||||
define void @user() {
|
||||
; IS__TUNIT____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@user
|
||||
; IS__TUNIT____-SAME: () #[[ATTR3]] {
|
||||
; IS__TUNIT____-SAME: () #[[ATTR4]] {
|
||||
; IS__TUNIT____-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4
|
||||
; IS__TUNIT____-NEXT: ret void
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree norecurse nosync nounwind willreturn writeonly
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@user
|
||||
; IS__CGSCC____-SAME: () #[[ATTR4]] {
|
||||
; IS__CGSCC____-SAME: () #[[ATTR5]] {
|
||||
; IS__CGSCC____-NEXT: store i32 0, i32* addrspacecast (i32 addrspace(3)* @ConstAS3Ptr to i32*), align 4
|
||||
; IS__CGSCC____-NEXT: ret void
|
||||
;
|
||||
@ -785,7 +785,7 @@ define i1 @test_merge_with_undef_values_ptr(i1 %c) {
|
||||
define internal i1 @undef_then_null(i1 %c, i32* %i32Aptr, i32* %i32Bptr) {
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@undef_then_null
|
||||
; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; IS__CGSCC____: a:
|
||||
; IS__CGSCC____-NEXT: ret i1 false
|
||||
@ -816,7 +816,7 @@ define internal i1 @undef_then_1(i1 %c, i32 %i32A, i32 %i32B) {
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@undef_then_1
|
||||
; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC____-SAME: (i1 [[C:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC____-NEXT: br i1 [[C]], label [[A:%.*]], label [[B:%.*]]
|
||||
; IS__CGSCC____: a:
|
||||
; IS__CGSCC____-NEXT: ret i1 false
|
||||
@ -909,7 +909,7 @@ define internal void @unknown_calle_arg_is_undef(void (i32)* %fn, i32 %arg) {
|
||||
define internal void @f1(i8*** %a) {
|
||||
; CHECK: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
|
||||
; CHECK-LABEL: define {{[^@]+}}@f1
|
||||
; CHECK-SAME: (i8*** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR2]] {
|
||||
; CHECK-SAME: (i8*** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[A:%.*]]) #[[ATTR3]] {
|
||||
; CHECK-NEXT: entry:
|
||||
; CHECK-NEXT: [[X:%.*]] = getelementptr { [2 x i8*] }, { [2 x i8*] }* @g, i32 0, i32 0, i32 0
|
||||
; CHECK-NEXT: store i8** [[X]], i8*** [[A]], align 8
|
||||
@ -1076,7 +1076,7 @@ define i1 @test_liveness(i1 %c) {
|
||||
; IS__TUNIT_OPM-NEXT: br label [[F]]
|
||||
; IS__TUNIT_OPM: f:
|
||||
; IS__TUNIT_OPM-NEXT: [[P:%.*]] = phi i1 [ true, [[ENTRY:%.*]] ], [ false, [[T]] ]
|
||||
; IS__TUNIT_OPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR6]]
|
||||
; IS__TUNIT_OPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR8]]
|
||||
; IS__TUNIT_OPM-NEXT: ret i1 [[RC1]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -1088,7 +1088,7 @@ define i1 @test_liveness(i1 %c) {
|
||||
; IS__TUNIT_NPM-NEXT: br label [[F]]
|
||||
; IS__TUNIT_NPM: f:
|
||||
; IS__TUNIT_NPM-NEXT: [[P:%.*]] = phi i1 [ true, [[ENTRY:%.*]] ], [ false, [[T]] ]
|
||||
; IS__TUNIT_NPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR5]]
|
||||
; IS__TUNIT_NPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR7]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i1 [[RC1]]
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -1100,7 +1100,7 @@ define i1 @test_liveness(i1 %c) {
|
||||
; IS__CGSCC_OPM-NEXT: br label [[F]]
|
||||
; IS__CGSCC_OPM: f:
|
||||
; IS__CGSCC_OPM-NEXT: [[P:%.*]] = phi i1 [ true, [[ENTRY:%.*]] ], [ false, [[T]] ]
|
||||
; IS__CGSCC_OPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR9:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: [[RC1:%.*]] = call noundef i1 @ret(i1 noundef [[P]]) #[[ATTR11:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: ret i1 [[RC1]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
@ -1177,25 +1177,35 @@ define void @dead_ret_caller() {
|
||||
|
||||
declare void @llvm.memcpy(i8* %dest, i8* %src, i32 %len, i1 %isvolatile)
|
||||
define internal i8 @memcpy_uses_store(i8 %arg) {
|
||||
; NOT_TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; NOT_TUNIT_NPM-LABEL: define {{[^@]+}}@memcpy_uses_store
|
||||
; NOT_TUNIT_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; NOT_TUNIT_NPM-NEXT: [[SRC:%.*]] = alloca i8, align 1
|
||||
; NOT_TUNIT_NPM-NEXT: [[DST:%.*]] = alloca i8, align 1
|
||||
; NOT_TUNIT_NPM-NEXT: store i8 [[ARG]], i8* [[SRC]], align 1
|
||||
; NOT_TUNIT_NPM-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR7:[0-9]+]]
|
||||
; NOT_TUNIT_NPM-NEXT: [[L:%.*]] = load i8, i8* [[DST]], align 1
|
||||
; NOT_TUNIT_NPM-NEXT: ret i8 [[L]]
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@memcpy_uses_store
|
||||
; IS__TUNIT_OPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR6:[0-9]+]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[SRC:%.*]] = alloca i8, align 1
|
||||
; IS__TUNIT_OPM-NEXT: [[DST:%.*]] = alloca i8, align 1
|
||||
; IS__TUNIT_OPM-NEXT: store i8 [[ARG]], i8* [[SRC]], align 1
|
||||
; IS__TUNIT_OPM-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR9]]
|
||||
; IS__TUNIT_OPM-NEXT: [[L:%.*]] = load i8, i8* [[DST]], align 1
|
||||
; IS__TUNIT_OPM-NEXT: ret i8 [[L]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@memcpy_uses_store
|
||||
; IS__TUNIT_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR5:[0-9]+]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[SRC:%.*]] = alloca i8, align 1
|
||||
; IS__TUNIT_NPM-NEXT: [[DST:%.*]] = alloca i8, align 1
|
||||
; IS__TUNIT_NPM-NEXT: store i8 [[ARG]], i8* [[SRC]], align 1
|
||||
; IS__TUNIT_NPM-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR6]]
|
||||
; IS__TUNIT_NPM-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR8]]
|
||||
; IS__TUNIT_NPM-NEXT: [[L:%.*]] = load i8, i8* [[DST]], align 1
|
||||
; IS__TUNIT_NPM-NEXT: ret i8 [[L]]
|
||||
;
|
||||
; IS__CGSCC____: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__CGSCC____-LABEL: define {{[^@]+}}@memcpy_uses_store
|
||||
; IS__CGSCC____-SAME: (i8 [[ARG:%.*]]) #[[ATTR7:[0-9]+]] {
|
||||
; IS__CGSCC____-NEXT: [[SRC:%.*]] = alloca i8, align 1
|
||||
; IS__CGSCC____-NEXT: [[DST:%.*]] = alloca i8, align 1
|
||||
; IS__CGSCC____-NEXT: store i8 [[ARG]], i8* [[SRC]], align 1
|
||||
; IS__CGSCC____-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* noalias nocapture nofree noundef nonnull writeonly dereferenceable(1) [[DST]], i8* noalias nocapture nofree noundef nonnull readonly dereferenceable(1) [[SRC]], i32 noundef 1, i1 noundef false) #[[ATTR9]]
|
||||
; IS__CGSCC____-NEXT: [[L:%.*]] = load i8, i8* [[DST]], align 1
|
||||
; IS__CGSCC____-NEXT: ret i8 [[L]]
|
||||
;
|
||||
%src = alloca i8
|
||||
%dst = alloca i8
|
||||
@ -1206,22 +1216,28 @@ define internal i8 @memcpy_uses_store(i8 %arg) {
|
||||
}
|
||||
|
||||
define i8 @memcpy_uses_store_caller(i8 %arg) {
|
||||
; IS__TUNIT____: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT____-LABEL: define {{[^@]+}}@memcpy_uses_store_caller
|
||||
; IS__TUNIT____-SAME: (i8 [[ARG:%.*]]) #[[ATTR0]] {
|
||||
; IS__TUNIT____-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR0]]
|
||||
; IS__TUNIT____-NEXT: ret i8 [[R]]
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@memcpy_uses_store_caller
|
||||
; IS__TUNIT_OPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR6]] {
|
||||
; IS__TUNIT_OPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR6]]
|
||||
; IS__TUNIT_OPM-NEXT: ret i8 [[R]]
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree nosync nounwind willreturn
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@memcpy_uses_store_caller
|
||||
; IS__TUNIT_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; IS__TUNIT_NPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR5]]
|
||||
; IS__TUNIT_NPM-NEXT: ret i8 [[R]]
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@memcpy_uses_store_caller
|
||||
; IS__CGSCC_OPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_OPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR10:[0-9]+]]
|
||||
; IS__CGSCC_OPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_OPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR12:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: ret i8 [[R]]
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree nosync nounwind readnone willreturn
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@memcpy_uses_store_caller
|
||||
; IS__CGSCC_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR5]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR8:[0-9]+]]
|
||||
; IS__CGSCC_NPM-SAME: (i8 [[ARG:%.*]]) #[[ATTR6]] {
|
||||
; IS__CGSCC_NPM-NEXT: [[R:%.*]] = call i8 @memcpy_uses_store(i8 [[ARG]]) #[[ATTR10:[0-9]+]]
|
||||
; IS__CGSCC_NPM-NEXT: ret i8 [[R]]
|
||||
;
|
||||
%r = call i8 @memcpy_uses_store(i8 %arg)
|
||||
@ -1230,46 +1246,54 @@ define i8 @memcpy_uses_store_caller(i8 %arg) {
|
||||
|
||||
|
||||
;.
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR5:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR6]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR7]] = { willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR5]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR6]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR7:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR10]] = { nofree nosync nounwind willreturn writeonly }
|
||||
;.
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR4:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR5]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR6]] = { willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR7]] = { nofree nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR5]] = { nofree nosync nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR6:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR7]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR8]] = { willreturn }
|
||||
; IS__TUNIT_NPM: attributes #[[ATTR9]] = { nofree nosync nounwind willreturn writeonly }
|
||||
;.
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8]] = { nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR4]] = { argmemonly nofree norecurse nosync nounwind writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { nounwind willreturn writeonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12]] = { nounwind readnone willreturn }
|
||||
;.
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR0:[0-9]+]] = { nocallback nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR1]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8]] = { nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR2]] = { nofree norecurse nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR3]] = { argmemonly nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR4]] = { nofree norecurse nosync nounwind readonly willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR5]] = { nofree norecurse nosync nounwind willreturn writeonly }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR6]] = { nofree nosync nounwind readnone willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR7]] = { nofree nosync nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR8:[0-9]+]] = { argmemonly nofree nounwind willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR9]] = { willreturn }
|
||||
; IS__CGSCC_NPM: attributes #[[ATTR10]] = { nounwind readnone willreturn }
|
||||
;.
|
||||
; CHECK: [[RNG0]] = !{i32 0, i32 -2147483648}
|
||||
;.
|
||||
|
@ -37,9 +37,9 @@ define i32 @fib(i32 %0) local_unnamed_addr #0 {
|
||||
; IS________OPM-NEXT: br i1 [[TMP2]], label [[TMP9:%.*]], label [[TMP3:%.*]]
|
||||
; IS________OPM: 3:
|
||||
; IS________OPM-NEXT: [[TMP4:%.*]] = add nsw i32 [[TMP0]], -1
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @fib(i32 [[TMP4]]) #[[ATTR25:[0-9]+]]
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = tail call i32 @fib(i32 [[TMP4]]) #[[ATTR24:[0-9]+]]
|
||||
; IS________OPM-NEXT: [[TMP6:%.*]] = add nsw i32 [[TMP0]], -2
|
||||
; IS________OPM-NEXT: [[TMP7:%.*]] = tail call i32 @fib(i32 [[TMP6]]) #[[ATTR25]]
|
||||
; IS________OPM-NEXT: [[TMP7:%.*]] = tail call i32 @fib(i32 [[TMP6]]) #[[ATTR24]]
|
||||
; IS________OPM-NEXT: [[TMP8:%.*]] = add nsw i32 [[TMP7]], [[TMP5]]
|
||||
; IS________OPM-NEXT: ret i32 [[TMP8]]
|
||||
; IS________OPM: 9:
|
||||
@ -52,9 +52,9 @@ define i32 @fib(i32 %0) local_unnamed_addr #0 {
|
||||
; IS________NPM-NEXT: br i1 [[TMP2]], label [[TMP9:%.*]], label [[TMP3:%.*]]
|
||||
; IS________NPM: 3:
|
||||
; IS________NPM-NEXT: [[TMP4:%.*]] = add nsw i32 [[TMP0]], -1
|
||||
; IS________NPM-NEXT: [[TMP5:%.*]] = tail call i32 @fib(i32 [[TMP4]]) #[[ATTR27:[0-9]+]]
|
||||
; IS________NPM-NEXT: [[TMP5:%.*]] = tail call i32 @fib(i32 [[TMP4]]) #[[ATTR26:[0-9]+]]
|
||||
; IS________NPM-NEXT: [[TMP6:%.*]] = add nsw i32 [[TMP0]], -2
|
||||
; IS________NPM-NEXT: [[TMP7:%.*]] = tail call i32 @fib(i32 [[TMP6]]) #[[ATTR27]]
|
||||
; IS________NPM-NEXT: [[TMP7:%.*]] = tail call i32 @fib(i32 [[TMP6]]) #[[ATTR26]]
|
||||
; IS________NPM-NEXT: [[TMP8:%.*]] = add nsw i32 [[TMP7]], [[TMP5]]
|
||||
; IS________NPM-NEXT: ret i32 [[TMP8]]
|
||||
; IS________NPM: 9:
|
||||
@ -199,8 +199,8 @@ define void @mutual_recursion1(i1 %c) #0 {
|
||||
; IS________OPM-SAME: (i1 [[C:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS________OPM-NEXT: br i1 [[C]], label [[REC:%.*]], label [[END:%.*]]
|
||||
; IS________OPM: rec:
|
||||
; IS________OPM-NEXT: call void @sink() #[[ATTR13:[0-9]+]]
|
||||
; IS________OPM-NEXT: call void @mutual_recursion2(i1 [[C]]) #[[ATTR26:[0-9]+]]
|
||||
; IS________OPM-NEXT: call void @sink() #[[ATTR12:[0-9]+]]
|
||||
; IS________OPM-NEXT: call void @mutual_recursion2(i1 [[C]]) #[[ATTR25:[0-9]+]]
|
||||
; IS________OPM-NEXT: br label [[END]]
|
||||
; IS________OPM: end:
|
||||
; IS________OPM-NEXT: ret void
|
||||
@ -210,8 +210,8 @@ define void @mutual_recursion1(i1 %c) #0 {
|
||||
; IS________NPM-SAME: (i1 [[C:%.*]]) #[[ATTR4:[0-9]+]] {
|
||||
; IS________NPM-NEXT: br i1 [[C]], label [[REC:%.*]], label [[END:%.*]]
|
||||
; IS________NPM: rec:
|
||||
; IS________NPM-NEXT: call void @sink() #[[ATTR13:[0-9]+]]
|
||||
; IS________NPM-NEXT: call void @mutual_recursion2(i1 noundef [[C]]) #[[ATTR28:[0-9]+]]
|
||||
; IS________NPM-NEXT: call void @sink() #[[ATTR12:[0-9]+]]
|
||||
; IS________NPM-NEXT: call void @mutual_recursion2(i1 noundef [[C]]) #[[ATTR27:[0-9]+]]
|
||||
; IS________NPM-NEXT: br label [[END]]
|
||||
; IS________NPM: end:
|
||||
; IS________NPM-NEXT: ret void
|
||||
@ -230,13 +230,13 @@ define void @mutual_recursion2(i1 %c) #0 {
|
||||
; IS________OPM: Function Attrs: nofree noinline nosync nounwind uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@mutual_recursion2
|
||||
; IS________OPM-SAME: (i1 [[C:%.*]]) #[[ATTR4]] {
|
||||
; IS________OPM-NEXT: call void @mutual_recursion1(i1 [[C]]) #[[ATTR26]]
|
||||
; IS________OPM-NEXT: call void @mutual_recursion1(i1 [[C]]) #[[ATTR25]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline nosync nounwind uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@mutual_recursion2
|
||||
; IS________NPM-SAME: (i1 [[C:%.*]]) #[[ATTR4]] {
|
||||
; IS________NPM-NEXT: call void @mutual_recursion1(i1 [[C]]) #[[ATTR28]]
|
||||
; IS________NPM-NEXT: call void @mutual_recursion1(i1 [[C]]) #[[ATTR27]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
call void @mutual_recursion1(i1 %c)
|
||||
@ -312,14 +312,14 @@ define void @conditional_exit(i32 %0, i32* nocapture readonly %1) local_unnamed_
|
||||
|
||||
; TEST 6 (positive case)
|
||||
; Call intrinsic function
|
||||
; CHECK: Function Attrs: nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK: Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
|
||||
; CHECK-NEXT: declare float @llvm.floor.f32(float)
|
||||
declare float @llvm.floor.f32(float)
|
||||
|
||||
define void @call_floor(float %a) #0 {
|
||||
; CHECK: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; CHECK: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@call_floor
|
||||
; CHECK-SAME: (float [[A:%.*]]) #[[ATTR9:[0-9]+]] {
|
||||
; CHECK-SAME: (float [[A:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
tail call float @llvm.floor.f32(float %a)
|
||||
@ -327,16 +327,16 @@ define void @call_floor(float %a) #0 {
|
||||
}
|
||||
|
||||
define float @call_floor2(float %a) #0 {
|
||||
; IS________OPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS________OPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS________OPM-SAME: (float [[A:%.*]]) #[[ATTR9]] {
|
||||
; IS________OPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR27:[0-9]+]]
|
||||
; IS________OPM-SAME: (float [[A:%.*]]) #[[ATTR0]] {
|
||||
; IS________OPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR26:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret float [[C]]
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline nosync nounwind readnone willreturn uwtable
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse nosync nounwind readnone willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@call_floor2
|
||||
; IS________NPM-SAME: (float [[A:%.*]]) #[[ATTR9]] {
|
||||
; IS________NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR29:[0-9]+]]
|
||||
; IS________NPM-SAME: (float [[A:%.*]]) #[[ATTR0]] {
|
||||
; IS________NPM-NEXT: [[C:%.*]] = tail call float @llvm.floor.f32(float [[A]]) #[[ATTR28:[0-9]+]]
|
||||
; IS________NPM-NEXT: ret float [[C]]
|
||||
;
|
||||
%c = tail call float @llvm.floor.f32(float %a)
|
||||
@ -356,13 +356,13 @@ define void @call_maybe_noreturn() #0 {
|
||||
; IS________OPM: Function Attrs: noinline nounwind uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@call_maybe_noreturn
|
||||
; IS________OPM-SAME: () #[[ATTR7]] {
|
||||
; IS________OPM-NEXT: tail call void @maybe_noreturn() #[[ATTR28:[0-9]+]]
|
||||
; IS________OPM-NEXT: tail call void @maybe_noreturn() #[[ATTR27:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: noinline nounwind uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@call_maybe_noreturn
|
||||
; IS________NPM-SAME: () #[[ATTR7]] {
|
||||
; IS________NPM-NEXT: tail call void @maybe_noreturn() #[[ATTR30:[0-9]+]]
|
||||
; IS________NPM-NEXT: tail call void @maybe_noreturn() #[[ATTR29:[0-9]+]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
tail call void @maybe_noreturn()
|
||||
@ -380,14 +380,14 @@ declare void @will_return() willreturn norecurse
|
||||
define void @f1() #0 {
|
||||
; IS________OPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS________OPM-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR29:[0-9]+]]
|
||||
; IS________OPM-SAME: () #[[ATTR10:[0-9]+]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR28:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@f1
|
||||
; IS________NPM-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR31:[0-9]+]]
|
||||
; IS________NPM-SAME: () #[[ATTR10:[0-9]+]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR30:[0-9]+]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
tail call void @will_return()
|
||||
@ -397,8 +397,8 @@ define void @f1() #0 {
|
||||
define void @f2() #0 {
|
||||
; CHECK: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; CHECK-LABEL: define {{[^@]+}}@f2
|
||||
; CHECK-SAME: () #[[ATTR11:[0-9]+]] {
|
||||
; CHECK-NEXT: tail call void @f1() #[[ATTR13:[0-9]+]]
|
||||
; CHECK-SAME: () #[[ATTR10:[0-9]+]] {
|
||||
; CHECK-NEXT: tail call void @f1() #[[ATTR12:[0-9]+]]
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
tail call void @f1()
|
||||
@ -439,8 +439,8 @@ declare i1 @maybe_raise_exception() #1 willreturn
|
||||
define void @invoke_test() personality i32 (...)* @__gxx_personality_v0 {
|
||||
; IS________OPM: Function Attrs: nounwind willreturn
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@invoke_test
|
||||
; IS________OPM-SAME: () #[[ATTR13]] personality i32 (...)* @__gxx_personality_v0 {
|
||||
; IS________OPM-NEXT: [[TMP1:%.*]] = invoke i1 @maybe_raise_exception() #[[ATTR29]]
|
||||
; IS________OPM-SAME: () #[[ATTR12]] personality i32 (...)* @__gxx_personality_v0 {
|
||||
; IS________OPM-NEXT: [[TMP1:%.*]] = invoke i1 @maybe_raise_exception() #[[ATTR28]]
|
||||
; IS________OPM-NEXT: to label [[N:%.*]] unwind label [[F:%.*]]
|
||||
; IS________OPM: N:
|
||||
; IS________OPM-NEXT: ret void
|
||||
@ -451,8 +451,8 @@ define void @invoke_test() personality i32 (...)* @__gxx_personality_v0 {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nounwind willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@invoke_test
|
||||
; IS________NPM-SAME: () #[[ATTR13]] personality i32 (...)* @__gxx_personality_v0 {
|
||||
; IS________NPM-NEXT: [[TMP1:%.*]] = invoke i1 @maybe_raise_exception() #[[ATTR31]]
|
||||
; IS________NPM-SAME: () #[[ATTR12]] personality i32 (...)* @__gxx_personality_v0 {
|
||||
; IS________NPM-NEXT: [[TMP1:%.*]] = invoke i1 @maybe_raise_exception() #[[ATTR30]]
|
||||
; IS________NPM-NEXT: to label [[N:%.*]] unwind label [[F:%.*]]
|
||||
; IS________NPM: N:
|
||||
; IS________NPM-NEXT: ret void
|
||||
@ -487,7 +487,7 @@ declare i32 @__gxx_personality_v0(...)
|
||||
define i32 @loop_constant_trip_count(i32* nocapture readonly %0) #0 {
|
||||
; IS________OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@loop_constant_trip_count
|
||||
; IS________OPM-SAME: (i32* nocapture nofree readonly [[TMP0:%.*]]) #[[ATTR14:[0-9]+]] {
|
||||
; IS________OPM-SAME: (i32* nocapture nofree readonly [[TMP0:%.*]]) #[[ATTR13:[0-9]+]] {
|
||||
; IS________OPM-NEXT: br label [[TMP3:%.*]]
|
||||
; IS________OPM: 2:
|
||||
; IS________OPM-NEXT: ret i32 [[TMP8:%.*]]
|
||||
@ -503,7 +503,7 @@ define i32 @loop_constant_trip_count(i32* nocapture readonly %0) #0 {
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@loop_constant_trip_count
|
||||
; IS________NPM-SAME: (i32* nocapture nofree nonnull readonly dereferenceable(4) [[TMP0:%.*]]) #[[ATTR14:[0-9]+]] {
|
||||
; IS________NPM-SAME: (i32* nocapture nofree nonnull readonly dereferenceable(4) [[TMP0:%.*]]) #[[ATTR13:[0-9]+]] {
|
||||
; IS________NPM-NEXT: br label [[TMP3:%.*]]
|
||||
; IS________NPM: 2:
|
||||
; IS________NPM-NEXT: ret i32 [[TMP8:%.*]]
|
||||
@ -547,7 +547,7 @@ define i32 @loop_constant_trip_count(i32* nocapture readonly %0) #0 {
|
||||
define i32 @loop_trip_count_unbound(i32 %0, i32 %1, i32* nocapture readonly %2, i32 %3) local_unnamed_addr #0 {
|
||||
; IS________OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@loop_trip_count_unbound
|
||||
; IS________OPM-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32* nocapture nofree readonly [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR14]] {
|
||||
; IS________OPM-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32* nocapture nofree readonly [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR13]] {
|
||||
; IS________OPM-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
|
||||
; IS________OPM-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP8:%.*]]
|
||||
; IS________OPM: 6:
|
||||
@ -566,7 +566,7 @@ define i32 @loop_trip_count_unbound(i32 %0, i32 %1, i32* nocapture readonly %2,
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@loop_trip_count_unbound
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32* nocapture nofree readonly [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR15:[0-9]+]] {
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]], i32 [[TMP1:%.*]], i32* nocapture nofree readonly [[TMP2:%.*]], i32 [[TMP3:%.*]]) local_unnamed_addr #[[ATTR14:[0-9]+]] {
|
||||
; IS________NPM-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP0]], [[TMP1]]
|
||||
; IS________NPM-NEXT: br i1 [[TMP5]], label [[TMP6:%.*]], label [[TMP8:%.*]]
|
||||
; IS________NPM: 6:
|
||||
@ -617,7 +617,7 @@ define i32 @loop_trip_count_unbound(i32 %0, i32 %1, i32* nocapture readonly %2,
|
||||
define i32 @loop_trip_dec(i32 %0, i32* nocapture readonly %1) local_unnamed_addr #0 {
|
||||
; IS________OPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@loop_trip_dec
|
||||
; IS________OPM-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR14]] {
|
||||
; IS________OPM-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR13]] {
|
||||
; IS________OPM-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[TMP0]], -1
|
||||
; IS________OPM-NEXT: br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP14:%.*]]
|
||||
; IS________OPM: 4:
|
||||
@ -638,7 +638,7 @@ define i32 @loop_trip_dec(i32 %0, i32* nocapture readonly %1) local_unnamed_addr
|
||||
;
|
||||
; IS________NPM: Function Attrs: argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@loop_trip_dec
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR14]] {
|
||||
; IS________NPM-SAME: (i32 [[TMP0:%.*]], i32* nocapture nofree readonly [[TMP1:%.*]]) local_unnamed_addr #[[ATTR13]] {
|
||||
; IS________NPM-NEXT: [[TMP3:%.*]] = icmp sgt i32 [[TMP0]], -1
|
||||
; IS________NPM-NEXT: br i1 [[TMP3]], label [[TMP4:%.*]], label [[TMP14:%.*]]
|
||||
; IS________NPM: 4:
|
||||
@ -709,16 +709,16 @@ f:
|
||||
define void @unreachable_exit_positive1() #0 {
|
||||
; IS________OPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@unreachable_exit_positive1
|
||||
; IS________OPM-SAME: () #[[ATTR11]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR29]]
|
||||
; IS________OPM-SAME: () #[[ATTR10]] {
|
||||
; IS________OPM-NEXT: tail call void @will_return() #[[ATTR28]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
; IS________OPM: unreachable_label:
|
||||
; IS________OPM-NEXT: unreachable
|
||||
;
|
||||
; IS________NPM: Function Attrs: noinline nounwind willreturn uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@unreachable_exit_positive1
|
||||
; IS________NPM-SAME: () #[[ATTR11]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR31]]
|
||||
; IS________NPM-SAME: () #[[ATTR10]] {
|
||||
; IS________NPM-NEXT: tail call void @will_return() #[[ATTR30]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
; IS________NPM: unreachable_label:
|
||||
; IS________NPM-NEXT: unreachable
|
||||
@ -811,7 +811,7 @@ unreachable_label:
|
||||
define void @unreachable_exit_negative2() #0 {
|
||||
; IS________OPM: Function Attrs: nofree noinline norecurse noreturn nosync nounwind readnone uwtable
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@unreachable_exit_negative2
|
||||
; IS________OPM-SAME: () #[[ATTR15:[0-9]+]] {
|
||||
; IS________OPM-SAME: () #[[ATTR14:[0-9]+]] {
|
||||
; IS________OPM-NEXT: br label [[L1:%.*]]
|
||||
; IS________OPM: L1:
|
||||
; IS________OPM-NEXT: br label [[L2:%.*]]
|
||||
@ -822,7 +822,7 @@ define void @unreachable_exit_negative2() #0 {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree noinline norecurse noreturn nosync nounwind readnone uwtable
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@unreachable_exit_negative2
|
||||
; IS________NPM-SAME: () #[[ATTR16:[0-9]+]] {
|
||||
; IS________NPM-SAME: () #[[ATTR15:[0-9]+]] {
|
||||
; IS________NPM-NEXT: br label [[L1:%.*]]
|
||||
; IS________NPM: L1:
|
||||
; IS________NPM-NEXT: br label [[L2:%.*]]
|
||||
@ -871,7 +871,7 @@ define void @call_longjmp(i8* nocapture readnone %0) local_unnamed_addr #0 {
|
||||
define i32 @infinite_loop_inside_bounded_loop(i32 %n) {
|
||||
; IS________OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@infinite_loop_inside_bounded_loop
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17:[0-9]+]] {
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16:[0-9]+]] {
|
||||
; IS________OPM-NEXT: entry:
|
||||
; IS________OPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS________OPM: for.cond:
|
||||
@ -892,7 +892,7 @@ define i32 @infinite_loop_inside_bounded_loop(i32 %n) {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@infinite_loop_inside_bounded_loop
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18:[0-9]+]] {
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR17:[0-9]+]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
; IS________NPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS________NPM: for.cond:
|
||||
@ -953,7 +953,7 @@ for.end: ; preds = %for.cond.cleanup
|
||||
define i32 @bounded_nested_loops(i32 %n) {
|
||||
; IS________OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@bounded_nested_loops
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16]] {
|
||||
; IS________OPM-NEXT: entry:
|
||||
; IS________OPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS________OPM: for.cond:
|
||||
@ -982,7 +982,7 @@ define i32 @bounded_nested_loops(i32 %n) {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@bounded_nested_loops
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR19:[0-9]+]] {
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18:[0-9]+]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
; IS________NPM-NEXT: br label [[FOR_COND:%.*]]
|
||||
; IS________NPM: for.cond:
|
||||
@ -1059,7 +1059,7 @@ for.end: ; preds = %for.cond.cleanup
|
||||
define i32 @bounded_loop_inside_unbounded_loop(i32 %n) {
|
||||
; IS________OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@bounded_loop_inside_unbounded_loop
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16]] {
|
||||
; IS________OPM-NEXT: entry:
|
||||
; IS________OPM-NEXT: br label [[WHILE_COND:%.*]]
|
||||
; IS________OPM: while.cond:
|
||||
@ -1090,7 +1090,7 @@ define i32 @bounded_loop_inside_unbounded_loop(i32 %n) {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@bounded_loop_inside_unbounded_loop
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18]] {
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
; IS________NPM-NEXT: br label [[WHILE_COND:%.*]]
|
||||
; IS________NPM: while.cond:
|
||||
@ -1174,7 +1174,7 @@ while.end: ; preds = %while.cond
|
||||
define i32 @nested_unbounded_loops(i32 %n) {
|
||||
; IS________OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@nested_unbounded_loops
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS________OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16]] {
|
||||
; IS________OPM-NEXT: entry:
|
||||
; IS________OPM-NEXT: br label [[WHILE_COND:%.*]]
|
||||
; IS________OPM: while.cond:
|
||||
@ -1204,7 +1204,7 @@ define i32 @nested_unbounded_loops(i32 %n) {
|
||||
;
|
||||
; IS________NPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@nested_unbounded_loops
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18]] {
|
||||
; IS________NPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS________NPM-NEXT: entry:
|
||||
; IS________NPM-NEXT: br label [[WHILE_COND:%.*]]
|
||||
; IS________NPM: while.cond:
|
||||
@ -1294,9 +1294,9 @@ while.end11: ; preds = %while.cond
|
||||
define void @non_loop_cycle(i32 %n) {
|
||||
; IS__TUNIT_OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@non_loop_cycle
|
||||
; IS__TUNIT_OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS__TUNIT_OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16]] {
|
||||
; IS__TUNIT_OPM-NEXT: entry:
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR25]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR24]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CALL]], 5
|
||||
; IS__TUNIT_OPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__TUNIT_OPM: if.then:
|
||||
@ -1304,7 +1304,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__TUNIT_OPM: if.else:
|
||||
; IS__TUNIT_OPM-NEXT: br label [[ENTRY2:%.*]]
|
||||
; IS__TUNIT_OPM: entry1:
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR25]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR24]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[CALL1]], 5
|
||||
; IS__TUNIT_OPM-NEXT: br i1 [[CMP2]], label [[IF_THEN3:%.*]], label [[IF_ELSE4:%.*]]
|
||||
; IS__TUNIT_OPM: if.then3:
|
||||
@ -1312,7 +1312,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__TUNIT_OPM: if.else4:
|
||||
; IS__TUNIT_OPM-NEXT: br label [[ENTRY2]]
|
||||
; IS__TUNIT_OPM: entry2:
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR25]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR24]]
|
||||
; IS__TUNIT_OPM-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[CALL5]], 5
|
||||
; IS__TUNIT_OPM-NEXT: br i1 [[CMP6]], label [[IF_THEN7:%.*]], label [[IF_ELSE8:%.*]]
|
||||
; IS__TUNIT_OPM: if.then7:
|
||||
@ -1324,9 +1324,9 @@ define void @non_loop_cycle(i32 %n) {
|
||||
;
|
||||
; IS__TUNIT_NPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@non_loop_cycle
|
||||
; IS__TUNIT_NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18]] {
|
||||
; IS__TUNIT_NPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS__TUNIT_NPM-NEXT: entry:
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR27]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR26]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CALL]], 5
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__TUNIT_NPM: if.then:
|
||||
@ -1334,7 +1334,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__TUNIT_NPM: if.else:
|
||||
; IS__TUNIT_NPM-NEXT: br label [[ENTRY2:%.*]]
|
||||
; IS__TUNIT_NPM: entry1:
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR27]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR26]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[CALL1]], 5
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[CMP2]], label [[IF_THEN3:%.*]], label [[IF_ELSE4:%.*]]
|
||||
; IS__TUNIT_NPM: if.then3:
|
||||
@ -1342,7 +1342,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__TUNIT_NPM: if.else4:
|
||||
; IS__TUNIT_NPM-NEXT: br label [[ENTRY2]]
|
||||
; IS__TUNIT_NPM: entry2:
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR27]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR26]]
|
||||
; IS__TUNIT_NPM-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[CALL5]], 5
|
||||
; IS__TUNIT_NPM-NEXT: br i1 [[CMP6]], label [[IF_THEN7:%.*]], label [[IF_ELSE8:%.*]]
|
||||
; IS__TUNIT_NPM: if.then7:
|
||||
@ -1354,9 +1354,9 @@ define void @non_loop_cycle(i32 %n) {
|
||||
;
|
||||
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@non_loop_cycle
|
||||
; IS__CGSCC_OPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS__CGSCC_OPM-SAME: (i32 [[N:%.*]]) #[[ATTR16]] {
|
||||
; IS__CGSCC_OPM-NEXT: entry:
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR30:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR29:[0-9]+]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CALL]], 5
|
||||
; IS__CGSCC_OPM-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]]
|
||||
; IS__CGSCC_OPM: if.then:
|
||||
@ -1364,7 +1364,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__CGSCC_OPM: if.else:
|
||||
; IS__CGSCC_OPM-NEXT: br label [[ENTRY2:%.*]]
|
||||
; IS__CGSCC_OPM: entry1:
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR30]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL1:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR29]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[CALL1]], 5
|
||||
; IS__CGSCC_OPM-NEXT: br i1 [[CMP2]], label [[IF_THEN3:%.*]], label [[IF_ELSE4:%.*]]
|
||||
; IS__CGSCC_OPM: if.then3:
|
||||
@ -1372,7 +1372,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
; IS__CGSCC_OPM: if.else4:
|
||||
; IS__CGSCC_OPM-NEXT: br label [[ENTRY2]]
|
||||
; IS__CGSCC_OPM: entry2:
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR30]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CALL5:%.*]] = call i32 @fact_loop(i32 [[N]]) #[[ATTR29]]
|
||||
; IS__CGSCC_OPM-NEXT: [[CMP6:%.*]] = icmp sgt i32 [[CALL5]], 5
|
||||
; IS__CGSCC_OPM-NEXT: br i1 [[CMP6]], label [[IF_THEN7:%.*]], label [[IF_ELSE8:%.*]]
|
||||
; IS__CGSCC_OPM: if.then7:
|
||||
@ -1384,7 +1384,7 @@ define void @non_loop_cycle(i32 %n) {
|
||||
;
|
||||
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone
|
||||
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@non_loop_cycle
|
||||
; IS__CGSCC_NPM-SAME: (i32 [[N:%.*]]) #[[ATTR18]] {
|
||||
; IS__CGSCC_NPM-SAME: (i32 [[N:%.*]]) #[[ATTR17]] {
|
||||
; IS__CGSCC_NPM-NEXT: entry:
|
||||
; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i32 @fact_loop(i32 [[N]])
|
||||
; IS__CGSCC_NPM-NEXT: [[CMP:%.*]] = icmp sgt i32 [[CALL]], 5
|
||||
@ -1458,13 +1458,13 @@ declare void @readonly_mustprogress() readonly mustprogress
|
||||
define void @willreturn_mustprogress_caller_1() mustprogress {
|
||||
; IS________OPM: Function Attrs: mustprogress
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_1
|
||||
; IS________OPM-SAME: () #[[ATTR20:[0-9]+]] {
|
||||
; IS________OPM-SAME: () #[[ATTR19:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @unknown()
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: mustprogress
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_1
|
||||
; IS________NPM-SAME: () #[[ATTR22:[0-9]+]] {
|
||||
; IS________NPM-SAME: () #[[ATTR21:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @unknown()
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
@ -1474,14 +1474,14 @@ define void @willreturn_mustprogress_caller_1() mustprogress {
|
||||
define void @willreturn_mustprogress_caller_2() mustprogress {
|
||||
; IS________OPM: Function Attrs: mustprogress readonly willreturn
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_2
|
||||
; IS________OPM-SAME: () #[[ATTR22:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @readonly() #[[ATTR18:[0-9]+]]
|
||||
; IS________OPM-SAME: () #[[ATTR21:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @readonly() #[[ATTR17:[0-9]+]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: mustprogress readonly willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_2
|
||||
; IS________NPM-SAME: () #[[ATTR24:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @readonly() #[[ATTR20:[0-9]+]]
|
||||
; IS________NPM-SAME: () #[[ATTR23:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @readonly() #[[ATTR19:[0-9]+]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
call void @readonly()
|
||||
@ -1490,13 +1490,13 @@ define void @willreturn_mustprogress_caller_2() mustprogress {
|
||||
define void @willreturn_mustprogress_caller_3() mustprogress {
|
||||
; IS________OPM: Function Attrs: mustprogress nosync readnone willreturn
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_3
|
||||
; IS________OPM-SAME: () #[[ATTR23:[0-9]+]] {
|
||||
; IS________OPM-SAME: () #[[ATTR22:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @readnone()
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: mustprogress nosync readnone willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_caller_3
|
||||
; IS________NPM-SAME: () #[[ATTR25:[0-9]+]] {
|
||||
; IS________NPM-SAME: () #[[ATTR24:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @readnone()
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
@ -1514,14 +1514,14 @@ define void @willreturn_mustprogress_callee_1() {
|
||||
define void @willreturn_mustprogress_callee_2() {
|
||||
; IS________OPM: Function Attrs: readonly willreturn
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_callee_2
|
||||
; IS________OPM-SAME: () #[[ATTR24:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @readonly_mustprogress() #[[ATTR24]]
|
||||
; IS________OPM-SAME: () #[[ATTR23:[0-9]+]] {
|
||||
; IS________OPM-NEXT: call void @readonly_mustprogress() #[[ATTR23]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: readonly willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_callee_2
|
||||
; IS________NPM-SAME: () #[[ATTR26:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @readonly_mustprogress() #[[ATTR26]]
|
||||
; IS________NPM-SAME: () #[[ATTR25:[0-9]+]] {
|
||||
; IS________NPM-NEXT: call void @readonly_mustprogress() #[[ATTR25]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
call void @readonly_mustprogress()
|
||||
@ -1538,14 +1538,14 @@ define void @willreturn_mustprogress_callee_3() {
|
||||
define void @willreturn_mustprogress_callee_4() {
|
||||
; IS________OPM: Function Attrs: readonly willreturn
|
||||
; IS________OPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_callee_4
|
||||
; IS________OPM-SAME: () #[[ATTR24]] {
|
||||
; IS________OPM-NEXT: call void @willreturn_mustprogress_callee_2() #[[ATTR24]]
|
||||
; IS________OPM-SAME: () #[[ATTR23]] {
|
||||
; IS________OPM-NEXT: call void @willreturn_mustprogress_callee_2() #[[ATTR23]]
|
||||
; IS________OPM-NEXT: ret void
|
||||
;
|
||||
; IS________NPM: Function Attrs: readonly willreturn
|
||||
; IS________NPM-LABEL: define {{[^@]+}}@willreturn_mustprogress_callee_4
|
||||
; IS________NPM-SAME: () #[[ATTR26]] {
|
||||
; IS________NPM-NEXT: call void @willreturn_mustprogress_callee_2() #[[ATTR26]]
|
||||
; IS________NPM-SAME: () #[[ATTR25]] {
|
||||
; IS________NPM-NEXT: call void @willreturn_mustprogress_callee_2() #[[ATTR25]]
|
||||
; IS________NPM-NEXT: ret void
|
||||
;
|
||||
call void @willreturn_mustprogress_callee_2()
|
||||
@ -1563,28 +1563,27 @@ attributes #1 = { uwtable noinline }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR5]] = { noreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR15]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR16:[0-9]+]] = { noreturn nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR17]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR18]] = { readonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR19:[0-9]+]] = { readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR20]] = { mustprogress }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR21:[0-9]+]] = { mustprogress readonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR22]] = { mustprogress readonly willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR23]] = { mustprogress nosync readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR24]] = { readonly willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR25]] = { nofree nosync nounwind readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR26]] = { nofree nosync nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR27]] = { readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR28]] = { nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR29]] = { willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR8:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR9:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR10]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR11:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR12]] = { nounwind willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR13]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR14]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR15:[0-9]+]] = { noreturn nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR16]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR17]] = { readonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR18:[0-9]+]] = { readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR19]] = { mustprogress }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR20:[0-9]+]] = { mustprogress readonly }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR21]] = { mustprogress readonly willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR22]] = { mustprogress nosync readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR23]] = { readonly willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR24]] = { nofree nosync nounwind readnone }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR25]] = { nofree nosync nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR26]] = { readnone willreturn }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR27]] = { nounwind }
|
||||
; IS__TUNIT_OPM: attributes #[[ATTR28]] = { willreturn }
|
||||
;.
|
||||
; IS________NPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
@ -1594,30 +1593,29 @@ attributes #1 = { uwtable noinline }
|
||||
; IS________NPM: attributes #[[ATTR5]] = { noreturn }
|
||||
; IS________NPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS________NPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS________NPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS________NPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR15]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS________NPM: attributes #[[ATTR16]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS________NPM: attributes #[[ATTR17:[0-9]+]] = { noreturn nounwind }
|
||||
; IS________NPM: attributes #[[ATTR18]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS________NPM: attributes #[[ATTR19]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR20]] = { readonly }
|
||||
; IS________NPM: attributes #[[ATTR21:[0-9]+]] = { readnone }
|
||||
; IS________NPM: attributes #[[ATTR22]] = { mustprogress }
|
||||
; IS________NPM: attributes #[[ATTR23:[0-9]+]] = { mustprogress readonly }
|
||||
; IS________NPM: attributes #[[ATTR24]] = { mustprogress readonly willreturn }
|
||||
; IS________NPM: attributes #[[ATTR25]] = { mustprogress nosync readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR26]] = { readonly willreturn }
|
||||
; IS________NPM: attributes #[[ATTR27]] = { nofree nosync nounwind readnone }
|
||||
; IS________NPM: attributes #[[ATTR28]] = { nofree nosync nounwind }
|
||||
; IS________NPM: attributes #[[ATTR29]] = { readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR30]] = { nounwind }
|
||||
; IS________NPM: attributes #[[ATTR31]] = { willreturn }
|
||||
; IS________NPM: attributes #[[ATTR8:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS________NPM: attributes #[[ATTR9:[0-9]+]] = { norecurse willreturn }
|
||||
; IS________NPM: attributes #[[ATTR10]] = { noinline nounwind willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR11:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR12]] = { nounwind willreturn }
|
||||
; IS________NPM: attributes #[[ATTR13]] = { argmemonly nofree noinline norecurse nosync nounwind readonly willreturn uwtable }
|
||||
; IS________NPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS________NPM: attributes #[[ATTR15]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS________NPM: attributes #[[ATTR16:[0-9]+]] = { noreturn nounwind }
|
||||
; IS________NPM: attributes #[[ATTR17]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS________NPM: attributes #[[ATTR18]] = { nofree norecurse nosync nounwind readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR19]] = { readonly }
|
||||
; IS________NPM: attributes #[[ATTR20:[0-9]+]] = { readnone }
|
||||
; IS________NPM: attributes #[[ATTR21]] = { mustprogress }
|
||||
; IS________NPM: attributes #[[ATTR22:[0-9]+]] = { mustprogress readonly }
|
||||
; IS________NPM: attributes #[[ATTR23]] = { mustprogress readonly willreturn }
|
||||
; IS________NPM: attributes #[[ATTR24]] = { mustprogress nosync readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR25]] = { readonly willreturn }
|
||||
; IS________NPM: attributes #[[ATTR26]] = { nofree nosync nounwind readnone }
|
||||
; IS________NPM: attributes #[[ATTR27]] = { nofree nosync nounwind }
|
||||
; IS________NPM: attributes #[[ATTR28]] = { readnone willreturn }
|
||||
; IS________NPM: attributes #[[ATTR29]] = { nounwind }
|
||||
; IS________NPM: attributes #[[ATTR30]] = { willreturn }
|
||||
;.
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR0]] = { nofree noinline norecurse nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR1]] = { nofree noinline nosync nounwind readnone uwtable }
|
||||
@ -1627,27 +1625,26 @@ attributes #1 = { uwtable noinline }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR5]] = { noreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR6]] = { noinline noreturn nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR7]] = { noinline nounwind uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9]] = { nofree noinline nosync nounwind readnone willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR15]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR16:[0-9]+]] = { noreturn nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR17]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR18]] = { readonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR19:[0-9]+]] = { readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR20]] = { mustprogress }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR21:[0-9]+]] = { mustprogress readonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR22]] = { mustprogress readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR23]] = { mustprogress nosync readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR24]] = { readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR25]] = { nofree nosync nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR26]] = { nofree nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR27]] = { readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR28]] = { nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR29]] = { willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR30]] = { nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR8:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR9:[0-9]+]] = { norecurse willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR10]] = { noinline nounwind willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR11:[0-9]+]] = { noinline willreturn uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR12]] = { nounwind willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR13]] = { argmemonly nofree noinline norecurse nosync nounwind readonly uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR14]] = { nofree noinline norecurse noreturn nosync nounwind readnone uwtable }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR15:[0-9]+]] = { noreturn nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR16]] = { nofree norecurse nosync nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR17]] = { readonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR18:[0-9]+]] = { readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR19]] = { mustprogress }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR20:[0-9]+]] = { mustprogress readonly }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR21]] = { mustprogress readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR22]] = { mustprogress nosync readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR23]] = { readonly willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR24]] = { nofree nosync nounwind readnone }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR25]] = { nofree nosync nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR26]] = { readnone willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR27]] = { nounwind }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR28]] = { willreturn }
|
||||
; IS__CGSCC_OPM: attributes #[[ATTR29]] = { nounwind readnone }
|
||||
;.
|
||||
|
@ -42,7 +42,7 @@ bb2: ; preds = %bb1, %bb
|
||||
declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
; CHECK: attributes #0 = { nounwind ssp }
|
||||
; CHECK: attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #1 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #2 = { noinline nounwind ssp }
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
|
||||
|
@ -79,5 +79,5 @@ define i32 @caller3() {
|
||||
ret i32 %v
|
||||
}
|
||||
|
||||
; CHECK: attributes #0 = { nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #0 = { nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #1 = { nounwind }
|
||||
|
@ -346,5 +346,5 @@ terminate:
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
; CHECK: attributes #1 = { nounwind readnone }
|
||||
; CHECK: attributes #2 = { ssp uwtable }
|
||||
; CHECK: attributes #3 = { argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #3 = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #4 = { noreturn nounwind }
|
||||
|
@ -66,5 +66,5 @@ declare <4 x i32> @llvm.aarch64.neon.smull.v4i32(<4 x i16>, <4 x i16>) nounwind
|
||||
declare <4 x i32> @llvm.aarch64.neon.umull.v4i32(<4 x i16>, <4 x i16>) nounwind readnone
|
||||
|
||||
; CHECK: attributes #0 = { nounwind readnone ssp }
|
||||
; CHECK: attributes #1 = { nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes #1 = { nocallback nofree nosync nounwind readnone willreturn }
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
|
@ -85,4 +85,4 @@ declare void @llvm.matrix.column.major.store.v10f64.i64(<10 x double>, double*,
|
||||
|
||||
; CHECK: declare void @llvm.matrix.column.major.store.v6f64.i64(<6 x double>, double* nocapture writeonly, i64, i1 immarg, i32 immarg, i32 immarg) #0
|
||||
; CHECK: declare void @llvm.matrix.column.major.store.v10f64.i64(<10 x double>, double* nocapture writeonly, i64, i1 immarg, i32 immarg, i32 immarg) #0
|
||||
; CHECK: attributes #0 = { argmemonly nofree nosync nounwind willreturn writeonly }
|
||||
; CHECK: attributes #0 = { argmemonly nocallback nofree nosync nounwind willreturn writeonly }
|
||||
|
@ -3074,5 +3074,5 @@ define void @test68(i8* %a, i8* %b) {
|
||||
!5 = !{i32 2, !"Debug Info Version", i32 3}
|
||||
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
; CHECK: attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #1 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: ![[RELEASE]] = !{}
|
||||
|
@ -105,7 +105,7 @@ declare void @NSLog(i8*, ...)
|
||||
declare void @llvm.dbg.value(metadata, metadata, metadata) nounwind readnone
|
||||
|
||||
; CHECK: attributes #0 = { ssp uwtable }
|
||||
; CHECK: attributes #1 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #1 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #2 = { nonlazybind }
|
||||
; CHECK: attributes [[NUW]] = { nounwind }
|
||||
; CHECK: attributes #4 = { noinline ssp uwtable }
|
||||
|
@ -224,7 +224,7 @@ declare void @unknown_no_openmp() "llvm.assume"="omp_no_openmp"
|
||||
; CHECK: attributes #[[ATTR2]] = { nosync nounwind readonly allocsize(0) }
|
||||
; CHECK: attributes #[[ATTR3:[0-9]+]] = { nosync nounwind }
|
||||
; CHECK: attributes #[[ATTR4:[0-9]+]] = { nounwind readnone speculatable }
|
||||
; CHECK: attributes #[[ATTR5:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #[[ATTR5:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #[[ATTR6]] = { "llvm.assume"="omp_no_openmp" }
|
||||
; CHECK: attributes #[[ATTR7]] = { nounwind readonly }
|
||||
; CHECK: attributes #[[ATTR8]] = { nounwind writeonly }
|
||||
|
@ -2422,7 +2422,7 @@ attributes #11 = { convergent }
|
||||
; AMDGPU: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind allocsize(0) }
|
||||
; AMDGPU: attributes #[[ATTR7]] = { convergent "llvm.assume"="ompx_spmd_amenable" }
|
||||
; AMDGPU: attributes #[[ATTR8]] = { convergent }
|
||||
; AMDGPU: attributes #[[ATTR9:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; AMDGPU: attributes #[[ATTR9:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; AMDGPU: attributes #[[ATTR10:[0-9]+]] = { alwaysinline }
|
||||
; AMDGPU: attributes #[[ATTR11:[0-9]+]] = { convergent nounwind }
|
||||
;.
|
||||
@ -2435,7 +2435,7 @@ attributes #11 = { convergent }
|
||||
; NVPTX: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind allocsize(0) }
|
||||
; NVPTX: attributes #[[ATTR7]] = { convergent "llvm.assume"="ompx_spmd_amenable" }
|
||||
; NVPTX: attributes #[[ATTR8]] = { convergent }
|
||||
; NVPTX: attributes #[[ATTR9:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; NVPTX: attributes #[[ATTR9:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; NVPTX: attributes #[[ATTR10:[0-9]+]] = { alwaysinline }
|
||||
; NVPTX: attributes #[[ATTR11:[0-9]+]] = { convergent nounwind }
|
||||
;.
|
||||
@ -2448,7 +2448,7 @@ attributes #11 = { convergent }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind allocsize(0) }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR7]] = { convergent "llvm.assume"="ompx_spmd_amenable" }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR8]] = { convergent }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR9:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR9:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR10:[0-9]+]] = { alwaysinline }
|
||||
; AMDGPU-DISABLED: attributes #[[ATTR11:[0-9]+]] = { convergent nounwind }
|
||||
;.
|
||||
@ -2461,7 +2461,7 @@ attributes #11 = { convergent }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR6:[0-9]+]] = { nofree nosync nounwind allocsize(0) }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR7]] = { convergent "llvm.assume"="ompx_spmd_amenable" }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR8]] = { convergent }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR9:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR9:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR10:[0-9]+]] = { alwaysinline }
|
||||
; NVPTX-DISABLED: attributes #[[ATTR11:[0-9]+]] = { convergent nounwind }
|
||||
;.
|
||||
|
@ -384,7 +384,7 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="all" "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="sm_53" "target-features"="+ptx32,+sm_53" }
|
||||
; CHECK: attributes #[[ATTR3:[0-9]+]] = { convergent nounwind readonly willreturn "frame-pointer"="all" "llvm.assume"="ompx_spmd_amenable" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="sm_53" "target-features"="+ptx32,+sm_53" }
|
||||
; CHECK: attributes #[[ATTR4]] = { nounwind }
|
||||
; CHECK: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR6:[0-9]+]] = { convergent nounwind }
|
||||
; CHECK: attributes #[[ATTR7]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
|
||||
;.
|
||||
@ -393,7 +393,7 @@ attributes #5 = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_ame
|
||||
; CHECK-DISABLED: attributes #[[ATTR2:[0-9]+]] = { convergent "frame-pointer"="all" "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="sm_53" "target-features"="+ptx32,+sm_53" }
|
||||
; CHECK-DISABLED: attributes #[[ATTR3:[0-9]+]] = { convergent nounwind readonly willreturn "frame-pointer"="all" "llvm.assume"="ompx_spmd_amenable" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="sm_53" "target-features"="+ptx32,+sm_53" }
|
||||
; CHECK-DISABLED: attributes #[[ATTR4]] = { nounwind }
|
||||
; CHECK-DISABLED: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; CHECK-DISABLED: attributes #[[ATTR5:[0-9]+]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK-DISABLED: attributes #[[ATTR6:[0-9]+]] = { convergent nounwind }
|
||||
; CHECK-DISABLED: attributes #[[ATTR7]] = { convergent nounwind "llvm.assume"="omp_no_openmp,ompx_spmd_amenable" }
|
||||
;.
|
||||
|
@ -64,7 +64,7 @@ entry:
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK-IL: Function Attrs: inaccessiblememonly nofree nosync nounwind willreturn
|
||||
; CHECK-IL: Function Attrs: inaccessiblememonly nocallback nofree nosync nounwind willreturn
|
||||
; CHECK-IL-NEXT: declare void @llvm.pseudoprobe(i64, i64, i32, i64)
|
||||
|
||||
; CHECK-IL: ![[#FOO:]] = distinct !DISubprogram(name: "foo"
|
||||
|
@ -68,7 +68,7 @@ declare void @destructor()
|
||||
declare dso_local i32 @__gxx_personality_v0(...)
|
||||
;.
|
||||
; CHECK: attributes #[[ATTR0:[0-9]+]] = { noreturn }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
;.
|
||||
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C, file: !1, producer: "debugify", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
|
||||
; CHECK: [[META1:![0-9]+]] = !DIFile(filename: "<stdin>", directory: "/")
|
||||
|
@ -12,7 +12,7 @@ declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadat
|
||||
; attached to the FP intrinsic.
|
||||
; CHECK1: declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata) #[[ATTR:[0-9]+]]
|
||||
; CHECK1: declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata) #[[ATTR]]
|
||||
; CHECK1: attributes #[[ATTR]] = { inaccessiblememonly nofree nosync nounwind willreturn }
|
||||
; CHECK1: attributes #[[ATTR]] = { inaccessiblememonly nocallback nofree nosync nounwind willreturn }
|
||||
; Note: FP exceptions aren't usually caught through normal unwind mechanisms,
|
||||
; but we may want to revisit this for asynchronous exception handling.
|
||||
define double @f1(double %a, double %b) #0 {
|
||||
|
@ -249,8 +249,8 @@ attributes #3 = { nounwind }
|
||||
!61 = !{!"branch_weights", i32 1, i32 1048575}
|
||||
;.
|
||||
; CHECK: attributes #[[ATTR0]] = { nounwind uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "denormal-fp-math"="ieee,ieee" "denormal-fp-math-f32"="ieee,ieee" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { argmemonly nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR1:[0-9]+]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK: attributes #[[ATTR2:[0-9]+]] = { argmemonly nocallback nofree nosync nounwind willreturn }
|
||||
; CHECK: attributes #[[ATTR3]] = { nounwind }
|
||||
;.
|
||||
; CHECK: [[META0:![0-9]+]] = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 11.0.0 (git@github.com:llvm/llvm-project.git 1d5da8cd30fce1c0a2c2fa6ba656dbfaa36192c8)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
|
||||
|
@ -12,17 +12,17 @@
|
||||
|
||||
|
||||
declare i8* @llvm.sponentry.p0i8()
|
||||
declare void @uninteresting()
|
||||
declare i8 @uninteresting()
|
||||
|
||||
; ALL-LABEL: define i8* @interesting(
|
||||
define i8* @interesting() {
|
||||
entry:
|
||||
; CHECK-INTERESTINGNESS: call
|
||||
; CHECK-NOCALL-NOT: call
|
||||
; CHECK-INTERESTINGNESS: call i8
|
||||
; CHECK-NOCALL-NOT: call i8
|
||||
|
||||
; CHECK-FINAL: %call = call i8* @llvm.sponentry.p0i8()
|
||||
; CHECK-FINAL-NEXT: ret i8* %call
|
||||
%call = call i8* @llvm.sponentry.p0i8()
|
||||
call void @uninteresting()
|
||||
call i8 @uninteresting()
|
||||
ret i8* %call
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ define i32 @t(i32 %a) {
|
||||
; CHECK-ALL: declare i32 @llvm.uadd.sat.i32(i32, i32) #0
|
||||
declare i32 @llvm.uadd.sat.i32(i32, i32) #0
|
||||
|
||||
; CHECK-ALL: attributes #0 = { nofree nosync nounwind readnone speculatable willreturn }
|
||||
; CHECK-ALL: attributes #0 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
|
||||
|
||||
; CHECK-INTERESTINGNESS: attributes #1 = {
|
||||
; CHECK-INTERESTINGNESS-SAME: "arg4"
|
||||
|
@ -125,6 +125,9 @@ struct CodeGenIntrinsic {
|
||||
/// True if the intrinsic is no-return.
|
||||
bool isNoReturn;
|
||||
|
||||
/// True if the intrinsic is no-callback.
|
||||
bool isNoCallback;
|
||||
|
||||
/// True if the intrinsic is no-sync.
|
||||
bool isNoSync;
|
||||
|
||||
|
@ -663,6 +663,7 @@ CodeGenIntrinsic::CodeGenIntrinsic(Record *R,
|
||||
isCommutative = false;
|
||||
canThrow = false;
|
||||
isNoReturn = false;
|
||||
isNoCallback = false;
|
||||
isNoSync = false;
|
||||
isNoFree = false;
|
||||
isWillReturn = false;
|
||||
@ -861,6 +862,8 @@ void CodeGenIntrinsic::setProperty(Record *R) {
|
||||
isConvergent = true;
|
||||
else if (R->getName() == "IntrNoReturn")
|
||||
isNoReturn = true;
|
||||
else if (R->getName() == "IntrNoCallback")
|
||||
isNoCallback = true;
|
||||
else if (R->getName() == "IntrNoSync")
|
||||
isNoSync = true;
|
||||
else if (R->getName() == "IntrNoFree")
|
||||
|
@ -610,6 +610,9 @@ struct AttributeComparator {
|
||||
if (L->isNoReturn != R->isNoReturn)
|
||||
return R->isNoReturn;
|
||||
|
||||
if (L->isNoCallback != R->isNoCallback)
|
||||
return R->isNoCallback;
|
||||
|
||||
if (L->isNoSync != R->isNoSync)
|
||||
return R->isNoSync;
|
||||
|
||||
@ -759,16 +762,18 @@ void IntrinsicEmitter::EmitAttributes(const CodeGenIntrinsicTable &Ints,
|
||||
if (!Intrinsic.canThrow ||
|
||||
(Intrinsic.ModRef != CodeGenIntrinsic::ReadWriteMem &&
|
||||
!Intrinsic.hasSideEffects) ||
|
||||
Intrinsic.isNoReturn || Intrinsic.isNoSync || Intrinsic.isNoFree ||
|
||||
Intrinsic.isWillReturn || Intrinsic.isCold || Intrinsic.isNoDuplicate ||
|
||||
Intrinsic.isNoMerge || Intrinsic.isConvergent ||
|
||||
Intrinsic.isSpeculatable) {
|
||||
Intrinsic.isNoReturn || Intrinsic.isNoCallback || Intrinsic.isNoSync ||
|
||||
Intrinsic.isNoFree || Intrinsic.isWillReturn || Intrinsic.isCold ||
|
||||
Intrinsic.isNoDuplicate || Intrinsic.isNoMerge ||
|
||||
Intrinsic.isConvergent || Intrinsic.isSpeculatable) {
|
||||
OS << " const Attribute::AttrKind Atts[] = {";
|
||||
ListSeparator LS(",");
|
||||
if (!Intrinsic.canThrow)
|
||||
OS << LS << "Attribute::NoUnwind";
|
||||
if (Intrinsic.isNoReturn)
|
||||
OS << LS << "Attribute::NoReturn";
|
||||
if (Intrinsic.isNoCallback)
|
||||
OS << LS << "Attribute::NoCallback";
|
||||
if (Intrinsic.isNoSync)
|
||||
OS << LS << "Attribute::NoSync";
|
||||
if (Intrinsic.isNoFree)
|
||||
|
Loading…
x
Reference in New Issue
Block a user