diff options
author | Michael Gottesman <mgottesman@apple.com> | 2013-06-27 00:25:01 +0000 |
---|---|---|
committer | Michael Gottesman <mgottesman@apple.com> | 2013-06-27 00:25:01 +0000 |
commit | 2253a2f52f3c46ae75cd05f5885acb987bd1d6b6 (patch) | |
tree | 483f06fa8a9b2981c441c49dde73b45eb724c03d /test | |
parent | 9367c79e62307421f28ba92174f3792a6360f37b (diff) | |
download | llvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.gz llvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.bz2 llvm-2253a2f52f3c46ae75cd05f5885acb987bd1d6b6.tar.xz |
Added support for the Builtin attribute.
The Builtin attribute is an attribute that can be placed on function call site that signal that even though a function is declared as being a builtin,
rdar://problem/13727199
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185049 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test')
-rw-r--r-- | test/Assembler/attribute-builtin.ll | 52 | ||||
-rw-r--r-- | test/Transforms/InstCombine/simplify-libcalls.ll | 12 |
2 files changed, 64 insertions, 0 deletions
diff --git a/test/Assembler/attribute-builtin.ll b/test/Assembler/attribute-builtin.ll new file mode 100644 index 0000000000..0b322aa983 --- /dev/null +++ b/test/Assembler/attribute-builtin.ll @@ -0,0 +1,52 @@ + +; Make sure that llvm-as/llvm-dis properly assembly/disassembly the 'builtin' +; attribute. +; +; rdar://13727199 + +; RUN: llvm-as -disable-verify < %s | \ +; llvm-dis -disable-verify | \ +; llvm-as -disable-verify | \ +; llvm-dis -disable-verify | \ +; FileCheck -check-prefix=ASSEMBLES %s + +; CHECK-ASSEMBLES: declare i8* @foo(i8*) [[NOBUILTIN:#[0-9]+]] +; CHECK-ASSEMBLES: call i8* @foo(i8* %x) [[BUILTIN:#[0-9]+]] +; CHECK-ASSEMBLES: attributes [[NOBUILTIN]] = { nobuiltin } +; CHECK-ASSEMBLES: attributes [[BUILTIN]] = { builtin } + +declare i8* @foo(i8*) #1 +define i8* @bar(i8* %x) { + %y = call i8* @foo(i8* %x) #0 + ret i8* %y +} + +; Make sure that we do not accept the 'builtin' attribute on function +; definitions, function declarations, and on call sites that call functions +; which do not have nobuiltin on them. +; rdar://13727199 + +; RUN: not llvm-as <%s 2>&1 | FileCheck -check-prefix=BAD %s + +; CHECK-BAD: Attribute 'builtin' can only be used in a call to a function with the 'nobuiltin' attribute. +; CHECK-BAD-NEXT: %y = call i8* @lar(i8* %x) #1 +; CHECK-BAD: Attribute 'builtin' can only be applied to a callsite. +; CHECK-BAD-NEXT: i8* (i8*)* @car +; CHECK-BAD: Attribute 'builtin' can only be applied to a callsite. +; CHECK-BAD-NEXT: i8* (i8*)* @mar + +declare i8* @lar(i8*) + +define i8* @har(i8* %x) { + %y = call i8* @lar(i8* %x) #0 + ret i8* %y +} + +define i8* @car(i8* %x) #0 { + ret i8* %x +} + +declare i8* @mar(i8*) #0 + +attributes #0 = { builtin } +attributes #1 = { nobuiltin } diff --git a/test/Transforms/InstCombine/simplify-libcalls.ll b/test/Transforms/InstCombine/simplify-libcalls.ll index 4f3a506bee..ad29a445de 100644 --- a/test/Transforms/InstCombine/simplify-libcalls.ll +++ b/test/Transforms/InstCombine/simplify-libcalls.ll @@ -130,3 +130,15 @@ define i32 @MemCpy() { } declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind + +declare i32 @strcmp(i8*, i8*) #0 + +define void @test9(i8* %x) { +; CHECK: @test9 +; CHECK-NOT: strcmp + %y = call i32 @strcmp(i8* %x, i8* %x) #1 + ret void +} + +attributes #0 = { nobuiltin } +attributes #1 = { builtin } |