1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-18 18:42:46 +02:00

[test] Properly match parameter/argument ABI attributes

These were found with D103412.
This commit is contained in:
Arthur Eubanks 2021-05-31 09:00:33 -07:00
parent 44ebb7579c
commit 8967f0ab59
11 changed files with 42 additions and 42 deletions

View File

@ -70,7 +70,7 @@ define i32 @foo() noreturn {
; CHECK: Undefined behavior: Null pointer dereference
call void @llvm.stackrestore(i8* null)
; CHECK: Undefined behavior: Null pointer dereference
call void @has_sret(i8* null)
call void @has_sret(i8* sret(i8) null)
; CHECK: Unusual: noalias argument aliases another argument
call void @has_noaliases(i32* @CG, i32* @CG)
; CHECK: Call argument count mismatches callee argument count

View File

@ -20,15 +20,15 @@ define void @run() {
; CHECK-NEXT: [[DOT0:%.*]] = getelementptr [[UNION_U:%.*]], %union.u* bitcast (%struct.s* @b to %union.u*), i32 0, i32 0
; CHECK-NEXT: [[DOT0_VAL:%.*]] = load x86_fp80, x86_fp80* [[DOT0]]
; CHECK-NEXT: [[TMP1:%.*]] = tail call x86_fp80 @UseLongDoubleSafely(x86_fp80 [[DOT0_VAL]])
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @AccessPaddingOfStruct(%struct.Foo* @a)
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @CaptureAStruct(%struct.Foo* @a)
; CHECK-NEXT: [[TMP2:%.*]] = call i64 @AccessPaddingOfStruct(%struct.Foo* byval(%struct.Foo) @a)
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @CaptureAStruct(%struct.Foo* byval(%struct.Foo) @a)
; CHECK-NEXT: ret void
;
entry:
tail call i8 @UseLongDoubleUnsafely(%union.u* byval(%union.u) align 16 bitcast (%struct.s* @b to %union.u*))
tail call x86_fp80 @UseLongDoubleSafely(%union.u* byval(%union.u) align 16 bitcast (%struct.s* @b to %union.u*))
call i64 @AccessPaddingOfStruct(%struct.Foo* @a)
call i64 @CaptureAStruct(%struct.Foo* @a)
call i64 @AccessPaddingOfStruct(%struct.Foo* byval(%struct.Foo) @a)
call i64 @CaptureAStruct(%struct.Foo* byval(%struct.Foo) @a)
ret void
}

View File

@ -46,7 +46,7 @@ define void @caller(i32** %Y, %struct.pair* %P) {
;
call void @test(i32** %Y), !dbg !1
call void @test_byval(%struct.pair* %P), !dbg !6
call void @test_byval(%struct.pair* byval(%struct.pair) %P), !dbg !6
ret void
}

View File

@ -25,7 +25,7 @@ define void @run() {
; IS________OPM-LABEL: define {{[^@]+}}@run
; IS________OPM-SAME: () #[[ATTR0:[0-9]+]] {
; IS________OPM-NEXT: entry:
; IS________OPM-NEXT: [[TMP0:%.*]] = call i64 @CaptureAStruct(%struct.Foo* nocapture nofree noundef nonnull readonly align 8 dereferenceable(16) @a) #[[ATTR0]]
; IS________OPM-NEXT: [[TMP0:%.*]] = call i64 @CaptureAStruct(%struct.Foo* nocapture nofree noundef nonnull readonly byval(%struct.Foo) align 8 dereferenceable(16) @a) #[[ATTR0]]
; IS________OPM-NEXT: unreachable
;
; IS__TUNIT_NPM: Function Attrs: nofree noreturn nosync nounwind readnone
@ -51,8 +51,8 @@ define void @run() {
entry:
tail call i8 @UseLongDoubleUnsafely(%union.u* byval(%union.u) align 16 bitcast (%struct.s* @b to %union.u*))
tail call x86_fp80 @UseLongDoubleSafely(%union.u* byval(%union.u) align 16 bitcast (%struct.s* @b to %union.u*))
call i64 @AccessPaddingOfStruct(%struct.Foo* @a)
call i64 @CaptureAStruct(%struct.Foo* @a)
call i64 @AccessPaddingOfStruct(%struct.Foo* byval(%struct.Foo) @a)
call i64 @CaptureAStruct(%struct.Foo* byval(%struct.Foo) @a)
ret void
}

View File

@ -384,22 +384,22 @@ define void @byval_no_fnarg(i8* byval(i8) %written) {
define void @testbyval(i8* %read_only) {
; IS__TUNIT____-LABEL: define {{[^@]+}}@testbyval
; IS__TUNIT____-SAME: (i8* nocapture readonly [[READ_ONLY:%.*]]) {
; IS__TUNIT____-NEXT: call void @byval_not_readonly_1(i8* nocapture readonly [[READ_ONLY]]) #[[ATTR2]]
; IS__TUNIT____-NEXT: call void @byval_not_readnone_1(i8* noalias nocapture readnone [[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: ret void
;
; IS__CGSCC____: Function Attrs: readonly
; IS__CGSCC____-LABEL: define {{[^@]+}}@testbyval
; IS__CGSCC____-SAME: (i8* nocapture noundef nonnull readonly dereferenceable(1) [[READ_ONLY:%.*]]) #[[ATTR2]] {
; IS__CGSCC____-NEXT: call void @byval_not_readonly_1(i8* noalias nocapture noundef nonnull readonly dereferenceable(1) [[READ_ONLY]]) #[[ATTR2]]
; IS__CGSCC____-NEXT: call void @byval_not_readnone_1(i8* noalias nocapture noundef nonnull readnone 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: ret void
;
call void @byval_not_readonly_1(i8* %read_only)
call void @byval_not_readonly_2(i8* %read_only)
call void @byval_not_readnone_1(i8* %read_only)
call void @byval_not_readnone_2(i8* %read_only)
call void @byval_no_fnarg(i8* %read_only)
call void @byval_not_readonly_1(i8* byval(i8) %read_only)
call void @byval_not_readonly_2(i8* byval(i8) %read_only)
call void @byval_not_readnone_1(i8* byval(i8) %read_only)
call void @byval_not_readnone_2(i8* byval(i8) %read_only)
call void @byval_no_fnarg(i8* byval(i8) %read_only)
ret void
}
;}

View File

@ -433,22 +433,22 @@ define i32* @complicated_args_inalloca(i32* %arg) {
; IS__TUNIT____: Function Attrs: nofree nosync nounwind readnone willreturn
; IS__TUNIT____-LABEL: define {{[^@]+}}@complicated_args_inalloca
; IS__TUNIT____-SAME: (i32* nofree readnone returned "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree writeonly "no-capture-maybe-returned" [[ARG]]) #[[ATTR1]]
; IS__TUNIT____-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree writeonly inalloca(i32) "no-capture-maybe-returned" [[ARG]]) #[[ATTR1]]
; IS__TUNIT____-NEXT: ret i32* [[CALL]]
;
; IS__CGSCC_OPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
; IS__CGSCC_OPM-LABEL: define {{[^@]+}}@complicated_args_inalloca
; IS__CGSCC_OPM-SAME: (i32* nofree noundef nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR8:[0-9]+]]
; IS__CGSCC_OPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR8:[0-9]+]]
; IS__CGSCC_OPM-NEXT: ret i32* [[CALL]]
;
; IS__CGSCC_NPM: Function Attrs: nofree norecurse nosync nounwind readnone willreturn
; IS__CGSCC_NPM-LABEL: define {{[^@]+}}@complicated_args_inalloca
; IS__CGSCC_NPM-SAME: (i32* nofree noundef nonnull readnone returned dereferenceable(4) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR1]] {
; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR7:[0-9]+]]
; IS__CGSCC_NPM-NEXT: [[CALL:%.*]] = call i32* @test_inalloca(i32* noalias nofree noundef nonnull writeonly inalloca(i32) dereferenceable(4) "no-capture-maybe-returned" [[ARG]]) #[[ATTR7:[0-9]+]]
; IS__CGSCC_NPM-NEXT: ret i32* [[CALL]]
;
%call = call i32* @test_inalloca(i32* %arg)
%call = call i32* @test_inalloca(i32* inalloca(i32) %arg)
ret i32* %call
}
@ -522,13 +522,13 @@ define void @complicated_args_sret(%struct.X** %b) {
; IS__TUNIT_OPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
; IS__TUNIT_OPM-LABEL: define {{[^@]+}}@complicated_args_sret
; 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 align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR6:[0-9]+]]
; IS__TUNIT_OPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret(%struct.X) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR6:[0-9]+]]
; IS__TUNIT_OPM-NEXT: ret void
;
; IS__TUNIT_NPM: Function Attrs: argmemonly nofree nosync nounwind willreturn writeonly
; IS__TUNIT_NPM-LABEL: define {{[^@]+}}@complicated_args_sret
; 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 align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR5:[0-9]+]]
; IS__TUNIT_NPM-NEXT: call void @test_sret(%struct.X* noalias nocapture nofree noundef writeonly sret(%struct.X) align 536870912 null, %struct.X** nocapture nofree writeonly align 8 [[B]]) #[[ATTR5:[0-9]+]]
; IS__TUNIT_NPM-NEXT: ret void
;
; IS__CGSCC____: Function Attrs: argmemonly nofree norecurse nosync nounwind willreturn writeonly
@ -536,7 +536,7 @@ define void @complicated_args_sret(%struct.X** %b) {
; IS__CGSCC____-SAME: (%struct.X** nocapture nofree noundef nonnull writeonly align 8 dereferenceable(8) [[B:%.*]]) #[[ATTR2]] {
; IS__CGSCC____-NEXT: unreachable
;
call void @test_sret(%struct.X* null, %struct.X** %b)
call void @test_sret(%struct.X* sret(%struct.X) null, %struct.X** %b)
ret void
}
@ -615,7 +615,7 @@ define void @complicated_args_byval() {
; IS__CGSCC_NPM-SAME: () #[[ATTR3:[0-9]+]] {
; IS__CGSCC_NPM-NEXT: ret void
;
call void @test_byval(%struct.X* @S)
call void @test_byval(%struct.X* byval(%struct.X) @S)
ret void
}
@ -655,7 +655,7 @@ define i8* @complicated_args_byval2() {
; IS__CGSCC_NPM-NEXT: [[C:%.*]] = call i8* @test_byval2() #[[ATTR10:[0-9]+]]
; IS__CGSCC_NPM-NEXT: ret i8* [[C]]
;
%c = call i8* @test_byval2(%struct.X* @S)
%c = call i8* @test_byval2(%struct.X* byval(%struct.X) @S)
ret i8* %c
}

View File

@ -14,9 +14,9 @@ define void @unused_byref_arg(i32* byref(i32) %dead_arg) {
define void @dont_replace_by_undef(i32* %ptr) {
; CHECK-LABEL: @dont_replace_by_undef(
; CHECK-NEXT: call void @unused_byref_arg(i32* undef)
; CHECK-NEXT: call void @unused_byref_arg(i32* byref(i32) undef)
; CHECK-NEXT: ret void
;
call void @unused_byref_arg(i32* %ptr)
call void @unused_byref_arg(i32* byref(i32) %ptr)
ret void
}

View File

@ -14,7 +14,7 @@ define i8 @drop_nuw() {
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
; CHECK-NEXT: call void @use(i8 [[IV]])
; CHECK-NEXT: call void @use(i8 zeroext [[IV]])
; CHECK-NEXT: [[IV_NEXT]] = add i8 [[IV]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 0
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
@ -27,7 +27,7 @@ entry:
loop:
%iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
call void @use(i8 %iv)
call void @use(i8 zeroext %iv)
%iv.next = add nuw i8 %iv, 1
%cmp = icmp eq i8 %iv, -1
@ -44,7 +44,7 @@ define i8 @drop_nsw() {
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ 127, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
; CHECK-NEXT: call void @use(i8 [[IV]])
; CHECK-NEXT: call void @use(i8 zeroext [[IV]])
; CHECK-NEXT: [[IV_NEXT]] = add i8 [[IV]], -1
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], 127
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
@ -57,7 +57,7 @@ entry:
loop:
%iv = phi i8 [ 127, %entry ], [ %iv.next, %loop ]
call void @use(i8 %iv)
call void @use(i8 zeroext %iv)
%iv.next = add nsw i8 %iv, -1
%cmp = icmp eq i8 %iv, -128
@ -74,7 +74,7 @@ define i8 @already_postinc() {
; CHECK-NEXT: br label [[LOOP:%.*]]
; CHECK: loop:
; CHECK-NEXT: [[IV:%.*]] = phi i8 [ 0, [[ENTRY:%.*]] ], [ [[IV_NEXT:%.*]], [[LOOP]] ]
; CHECK-NEXT: call void @use(i8 [[IV]])
; CHECK-NEXT: call void @use(i8 zeroext [[IV]])
; CHECK-NEXT: [[IV_NEXT]] = add nuw i8 [[IV]], 1
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[IV_NEXT]], -1
; CHECK-NEXT: br i1 [[CMP]], label [[EXIT:%.*]], label [[LOOP]]
@ -87,7 +87,7 @@ entry:
loop:
%iv = phi i8 [ 0, %entry ], [ %iv.next, %loop ]
call void @use(i8 %iv)
call void @use(i8 zeroext %iv)
%iv.next = add nuw i8 %iv, 1
%cmp = icmp eq i8 %iv.next, -1

View File

@ -68,7 +68,7 @@ entry:
br i1 %work_match, label %.execute.fn, label %.check.next
.execute.fn: ; preds = %.execute.parallel
call void @__omp_outlined__1_wrapper(i16 0, i32 %4)
call void @__omp_outlined__1_wrapper(i16 zeroext 0, i32 %4)
br label %.terminate.parallel
.check.next: ; preds = %.execute.parallel
@ -77,7 +77,7 @@ entry:
br i1 %work_match1, label %.execute.fn2, label %.check.next3
.execute.fn2: ; preds = %.check.next
call void @__omp_outlined__2_wrapper(i16 0, i32 %4)
call void @__omp_outlined__2_wrapper(i16 zeroext 0, i32 %4)
br label %.terminate.parallel
.check.next3: ; preds = %.check.next
@ -86,7 +86,7 @@ entry:
br i1 %work_match4, label %.execute.fn5, label %.check.next6
.execute.fn5: ; preds = %.check.next3
call void @__omp_outlined__3_wrapper(i16 0, i32 %4)
call void @__omp_outlined__3_wrapper(i16 zeroext 0, i32 %4)
br label %.terminate.parallel
.check.next6: ; preds = %.check.next3

View File

@ -504,7 +504,7 @@ define void @test4_invoke(i1 %0) personality i8* bitcast (i32 (...)* @__gxx_pers
; CHECK-LABEL: define {{[^@]+}}@test4_invoke
; CHECK-SAME: (i1 [[TMP0:%.*]]) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
; CHECK-NEXT: call void @known_unique_icv(i1 [[TMP0]])
; CHECK-NEXT: [[TMP2:%.*]] = invoke i32 @maybe_throw(i1 [[TMP0]])
; CHECK-NEXT: [[TMP2:%.*]] = invoke i32 @maybe_throw(i1 zeroext [[TMP0]])
; CHECK-NEXT: to label [[CONT:%.*]] unwind label [[EXC:%.*]]
; CHECK: cont:
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq i1 [[TMP0]], false
@ -521,7 +521,7 @@ define void @test4_invoke(i1 %0) personality i8* bitcast (i32 (...)* @__gxx_pers
; CHECK-NEXT: ret void
;
call void @known_unique_icv(i1 %0)
invoke i32 @maybe_throw(i1 %0)
invoke i32 @maybe_throw(i1 zeroext %0)
to label %cont unwind label %exc
cont:

View File

@ -215,11 +215,11 @@ entry:
define void @test13() {
; CHECK-LABEL: @test13
; CHECK: tail call void @bar(%struct.foo* byval(%struct.foo) %f)
; CHECK: tail call void @bar(%struct.foo* null)
; CHECK: tail call void @bar(%struct.foo* byval(%struct.foo) null)
entry:
%f = alloca %struct.foo
call void @bar(%struct.foo* byval(%struct.foo) %f)
call void @bar(%struct.foo* null)
call void @bar(%struct.foo* byval(%struct.foo) null)
ret void
}