diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Assembler/byval-type-attr.ll | 31 | ||||
-rw-r--r-- | llvm/test/Assembler/invalid-byval-type1.ll | 4 | ||||
-rw-r--r-- | llvm/test/Assembler/invalid-byval-type2.ll | 4 | ||||
-rw-r--r-- | llvm/test/Assembler/invalid-byval-type3.ll | 4 | ||||
-rw-r--r-- | llvm/test/Bitcode/Inputs/byval-upgrade.bc | bin | 0 -> 1092 bytes | |||
-rw-r--r-- | llvm/test/Bitcode/attributes-3.3.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/attributes.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/byval-upgrade.test | 7 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-3.6.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-3.7.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-3.8.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-3.9.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-4.0.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-5.0.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility-6.0.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility.ll | 11 | ||||
-rw-r--r-- | llvm/test/Bitcode/highLevelStructure.3.2.ll | 4 | ||||
-rw-r--r-- | llvm/test/CodeGen/AArch64/byval-type.ll | 37 | ||||
-rw-r--r-- | llvm/test/Transforms/Inline/byval-tail-call.ll | 4 |
19 files changed, 110 insertions, 14 deletions
diff --git a/llvm/test/Assembler/byval-type-attr.ll b/llvm/test/Assembler/byval-type-attr.ll new file mode 100644 index 00000000000..eb17a30db3b --- /dev/null +++ b/llvm/test/Assembler/byval-type-attr.ll @@ -0,0 +1,31 @@ +; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s + +; CHECK: define void @foo(i32* byval(i32) align 4) +define void @foo(i32* byval(i32) align 4) { + ret void +} + +; CHECK: define void @bar({ i32*, i8 }* byval({ i32*, i8 }) align 4) +define void @bar({i32*, i8}* byval({i32*, i8}) align 4) { + ret void +} + +define void @caller({ i32*, i8 }* %ptr) personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { +; CHECK: call void @bar({ i32*, i8 }* byval({ i32*, i8 }) %ptr) +; CHECK: invoke void @bar({ i32*, i8 }* byval({ i32*, i8 }) %ptr) + call void @bar({i32*, i8}* byval %ptr) + invoke void @bar({i32*, i8}* byval %ptr) to label %success unwind label %fail + +success: + ret void + +fail: + landingpad { i8*, i32 } cleanup + ret void +} + +; CHECK: declare void @baz([8 x i8]* byval([8 x i8])) +%named_type = type [8 x i8] +declare void @baz(%named_type* byval(%named_type)) + +declare i32 @__gxx_personality_v0(...) diff --git a/llvm/test/Assembler/invalid-byval-type1.ll b/llvm/test/Assembler/invalid-byval-type1.ll new file mode 100644 index 00000000000..236790e1142 --- /dev/null +++ b/llvm/test/Assembler/invalid-byval-type1.ll @@ -0,0 +1,4 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +; CHECK: Attribute 'byval' type does not match parameter! +declare void @foo(i32* byval(i8)) diff --git a/llvm/test/Assembler/invalid-byval-type2.ll b/llvm/test/Assembler/invalid-byval-type2.ll new file mode 100644 index 00000000000..3ca0d5e7c4c --- /dev/null +++ b/llvm/test/Assembler/invalid-byval-type2.ll @@ -0,0 +1,4 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +; CHECK: error: void type only allowed for function results +declare void @foo(i32* byval(void)) diff --git a/llvm/test/Assembler/invalid-byval-type3.ll b/llvm/test/Assembler/invalid-byval-type3.ll new file mode 100644 index 00000000000..4626dd71c5b --- /dev/null +++ b/llvm/test/Assembler/invalid-byval-type3.ll @@ -0,0 +1,4 @@ +; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck %s + +; CHECK: Attributes 'byval' and 'inalloca' do not support unsized types! +declare void @foo(void()* byval(void())) diff --git a/llvm/test/Bitcode/Inputs/byval-upgrade.bc b/llvm/test/Bitcode/Inputs/byval-upgrade.bc Binary files differnew file mode 100644 index 00000000000..e0da41f78e7 --- /dev/null +++ b/llvm/test/Bitcode/Inputs/byval-upgrade.bc diff --git a/llvm/test/Bitcode/attributes-3.3.ll b/llvm/test/Bitcode/attributes-3.3.ll index b564425c373..f1b37d19912 100644 --- a/llvm/test/Bitcode/attributes-3.3.ll +++ b/llvm/test/Bitcode/attributes-3.3.ll @@ -48,7 +48,7 @@ define void @f7(i8* noalias) } define void @f8(i8* byval) -; CHECK: define void @f8(i8* byval) +; CHECK: define void @f8(i8* byval(i8)) { ret void; } diff --git a/llvm/test/Bitcode/attributes.ll b/llvm/test/Bitcode/attributes.ll index de3cf8dd4d7..6f149c0d3bf 100644 --- a/llvm/test/Bitcode/attributes.ll +++ b/llvm/test/Bitcode/attributes.ll @@ -45,7 +45,7 @@ define void @f7(i8* noalias) } define void @f8(i8* byval) -; CHECK: define void @f8(i8* byval) +; CHECK: define void @f8(i8* byval(i8)) { ret void; } diff --git a/llvm/test/Bitcode/byval-upgrade.test b/llvm/test/Bitcode/byval-upgrade.test new file mode 100644 index 00000000000..1012bf72883 --- /dev/null +++ b/llvm/test/Bitcode/byval-upgrade.test @@ -0,0 +1,7 @@ +RUN: llvm-dis %p/Inputs/byval-upgrade.bc -o - | FileCheck %s + +Make sure we upgrade old-stile IntAttribute byval records to a fully typed +version correctly. + +CHECK: call void @bar({ i32*, i8 }* byval({ i32*, i8 }) %ptr) +CHECK: invoke void @bar({ i32*, i8 }* byval({ i32*, i8 }) %ptr) diff --git a/llvm/test/Bitcode/compatibility-3.6.ll b/llvm/test/Bitcode/compatibility-3.6.ll index e9313dfba87..322c95b02d1 100644 --- a/llvm/test/Bitcode/compatibility-3.6.ll +++ b/llvm/test/Bitcode/compatibility-3.6.ll @@ -404,7 +404,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-3.7.ll b/llvm/test/Bitcode/compatibility-3.7.ll index 82fc9905535..e8260741373 100644 --- a/llvm/test/Bitcode/compatibility-3.7.ll +++ b/llvm/test/Bitcode/compatibility-3.7.ll @@ -410,7 +410,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-3.8.ll b/llvm/test/Bitcode/compatibility-3.8.ll index 2e70a380d10..c8d82619155 100644 --- a/llvm/test/Bitcode/compatibility-3.8.ll +++ b/llvm/test/Bitcode/compatibility-3.8.ll @@ -435,7 +435,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-3.9.ll b/llvm/test/Bitcode/compatibility-3.9.ll index 7c84daa7d3c..f031e54a9f2 100644 --- a/llvm/test/Bitcode/compatibility-3.9.ll +++ b/llvm/test/Bitcode/compatibility-3.9.ll @@ -504,7 +504,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-4.0.ll b/llvm/test/Bitcode/compatibility-4.0.ll index 9e34d48c95f..8020df45da6 100644 --- a/llvm/test/Bitcode/compatibility-4.0.ll +++ b/llvm/test/Bitcode/compatibility-4.0.ll @@ -504,7 +504,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-5.0.ll b/llvm/test/Bitcode/compatibility-5.0.ll index a4b3fca82b7..3b32d668af5 100644 --- a/llvm/test/Bitcode/compatibility-5.0.ll +++ b/llvm/test/Bitcode/compatibility-5.0.ll @@ -508,7 +508,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility-6.0.ll b/llvm/test/Bitcode/compatibility-6.0.ll index 097e19ecb7f..3b08c4a7231 100644 --- a/llvm/test/Bitcode/compatibility-6.0.ll +++ b/llvm/test/Bitcode/compatibility-6.0.ll @@ -515,7 +515,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) diff --git a/llvm/test/Bitcode/compatibility.ll b/llvm/test/Bitcode/compatibility.ll index 06b81fa14a8..991bde69b61 100644 --- a/llvm/test/Bitcode/compatibility.ll +++ b/llvm/test/Bitcode/compatibility.ll @@ -529,7 +529,7 @@ declare void @f.param.signext(i8 signext) declare void @f.param.inreg(i8 inreg) ; CHECK: declare void @f.param.inreg(i8 inreg) declare void @f.param.byval({ i8, i8 }* byval) -; CHECK: declare void @f.param.byval({ i8, i8 }* byval) +; CHECK: declare void @f.param.byval({ i8, i8 }* byval({ i8, i8 })) declare void @f.param.inalloca(i8* inalloca) ; CHECK: declare void @f.param.inalloca(i8* inalloca) declare void @f.param.sret(i8* sret) @@ -1735,6 +1735,15 @@ define i8** @constexpr() { declare void @llvm.test.immarg.intrinsic(i32 immarg) ; CHECK: declare void @llvm.test.immarg.intrinsic(i32 immarg) +; byval attribute with type +%named_type = type [8 x i8] +declare void @byval_type(i32* byval(i32) align 2) +declare void @byval_type2({ i8, i8* }* byval({ i8, i8* })) +declare void @byval_named_type(%named_type* byval(%named_type)) +; CHECK: declare void @byval_type(i32* byval(i32) align 2) +; CHECK: declare void @byval_type2({ i8, i8* }* byval({ i8, i8* })) +; CHECK: declare void @byval_named_type([8 x i8]* byval([8 x i8])) + ; CHECK: attributes #0 = { alignstack=4 } ; CHECK: attributes #1 = { alignstack=8 } ; CHECK: attributes #2 = { alwaysinline } diff --git a/llvm/test/Bitcode/highLevelStructure.3.2.ll b/llvm/test/Bitcode/highLevelStructure.3.2.ll index 749b157cffc..91d6ee4ac25 100644 --- a/llvm/test/Bitcode/highLevelStructure.3.2.ll +++ b/llvm/test/Bitcode/highLevelStructure.3.2.ll @@ -41,7 +41,7 @@ declare void @ParamAttr3(i8* sret) declare void @ParamAttr4(i8 signext) ; CHECK: declare void @ParamAttr5(i8* inreg) declare void @ParamAttr5(i8* inreg) -; CHECK: declare void @ParamAttr6(i8* byval) +; CHECK: declare void @ParamAttr6(i8* byval(i8)) declare void @ParamAttr6(i8* byval) ; CHECK: declare void @ParamAttr7(i8* noalias) declare void @ParamAttr7(i8* noalias) @@ -51,7 +51,7 @@ declare void @ParamAttr8(i8* nocapture) declare void @ParamAttr9(i8* nest noalias nocapture) ; CHECK: declare void @ParamAttr10{{[(i8* sret noalias nocapture) | (i8* noalias nocapture sret)]}} declare void @ParamAttr10(i8* sret noalias nocapture) -;CHECK: declare void @ParamAttr11{{[(i8* byval noalias nocapture) | (i8* noalias nocapture byval)]}} +;CHECK: declare void @ParamAttr11{{[(i8* byval(i8) noalias nocapture) | (i8* noalias nocapture byval(i8))]}} declare void @ParamAttr11(i8* byval noalias nocapture) ;CHECK: declare void @ParamAttr12{{[(i8* inreg noalias nocapture) | (i8* noalias nocapture inreg)]}} declare void @ParamAttr12(i8* inreg noalias nocapture) diff --git a/llvm/test/CodeGen/AArch64/byval-type.ll b/llvm/test/CodeGen/AArch64/byval-type.ll new file mode 100644 index 00000000000..0c2e2dc471d --- /dev/null +++ b/llvm/test/CodeGen/AArch64/byval-type.ll @@ -0,0 +1,37 @@ +; RUN: llc -mtriple=aarch64-linux-gnu %s -o - | FileCheck %s + +define i8 @byval_match(i8* byval(i8) align 1, i8* byval %ptr) { +; CHECK-LABEL: byval_match: +; CHECK: ldrb w0, [sp, #8] + %res = load i8, i8* %ptr + ret i8 %res +} + +define void @caller_match(i8* %p0, i8* %p1) { +; CHECK-LABEL: caller_match: +; CHECK: ldrb [[P1:w[0-9]+]], [x1] +; CHECK: strb [[P1]], [sp, #8] +; CHECK: ldrb [[P0:w[0-9]+]], [x0] +; CHECK: strb [[P0]], [sp] +; CHECK: bl byval_match + call i8 @byval_match(i8* byval(i8) align 1 %p0, i8* byval %p1) + ret void +} + +define i8 @byval_large([3 x i64]* byval([3 x i64]) align 8, i8* byval %ptr) { +; CHECK-LABEL: byval_large: +; CHECK: ldrb w0, [sp, #24] + %res = load i8, i8* %ptr + ret i8 %res +} + +define void @caller_large([3 x i64]* %p0, i8* %p1) { +; CHECK-LABEL: caller_large: +; CHECK: ldr [[P0HI:x[0-9]+]], [x0, #16] +; CHECK: ldr [[P0LO:q[0-9]+]], [x0] +; CHECK: str [[P0HI]], [sp, #16] +; CHECK: str [[P0LO]], [sp] +; CHECK: bl byval_large + call i8 @byval_large([3 x i64]* byval([3 x i64]) align 8 %p0, i8* byval %p1) + ret void +} diff --git a/llvm/test/Transforms/Inline/byval-tail-call.ll b/llvm/test/Transforms/Inline/byval-tail-call.ll index 8aafe7943f4..be495f1bcd3 100644 --- a/llvm/test/Transforms/Inline/byval-tail-call.ll +++ b/llvm/test/Transforms/Inline/byval-tail-call.ll @@ -56,7 +56,7 @@ define void @foobar(i32* %x) { ; CHECK: %[[POS:.*]] = alloca i32 ; CHECK: %[[VAL:.*]] = load i32, i32* %x ; CHECK: store i32 %[[VAL]], i32* %[[POS]] -; CHECK: tail call void @ext2(i32* byval nonnull %[[POS]] +; CHECK: tail call void @ext2(i32* nonnull byval %[[POS]] ; CHECK: ret void tail call void @bar2(i32* byval %x) ret void @@ -67,7 +67,7 @@ define void @barfoo() { ; CHECK: %[[POS:.*]] = alloca i32 ; CHECK: %[[VAL:.*]] = load i32, i32* %x ; CHECK: store i32 %[[VAL]], i32* %[[POS]] -; CHECK: tail call void @ext2(i32* byval nonnull %[[POS]] +; CHECK: tail call void @ext2(i32* nonnull byval %[[POS]] ; CHECK: ret void %x = alloca i32 tail call void @bar2(i32* byval %x) |