diff options
author | Petar Jovanovic <petar.jovanovic@imgtec.com> | 2015-05-26 13:30:54 +0000 |
---|---|---|
committer | Petar Jovanovic <petar.jovanovic@imgtec.com> | 2015-05-26 13:30:54 +0000 |
commit | 9aa0f1657f5477eca7c816079728aa358444a23b (patch) | |
tree | 709eb05dc0369861c19107d56879dc1fb82a210a /clang/test/CodeGen | |
parent | 0af4f635f184137a437f2c08a45c4661c86e8459 (diff) | |
download | bcm5719-llvm-9aa0f1657f5477eca7c816079728aa358444a23b.tar.gz bcm5719-llvm-9aa0f1657f5477eca7c816079728aa358444a23b.zip |
[MIPS] fix extension of integer types (function calls)
On MIPS unsigned int type should not be zero extended but sign-extended.
Patch by Strahinja Petrovic.
Differential Revision: http://reviews.llvm.org/D9198
llvm-svn: 238200
Diffstat (limited to 'clang/test/CodeGen')
-rw-r--r-- | clang/test/CodeGen/atomics-inlining.c | 4 | ||||
-rw-r--r-- | clang/test/CodeGen/mips-unsigned-ext-var.c | 22 | ||||
-rw-r--r-- | clang/test/CodeGen/mips-unsigned-extend.c | 15 |
3 files changed, 39 insertions, 2 deletions
diff --git a/clang/test/CodeGen/atomics-inlining.c b/clang/test/CodeGen/atomics-inlining.c index 9fdad4f51f1..23a79a2d28f 100644 --- a/clang/test/CodeGen/atomics-inlining.c +++ b/clang/test/CodeGen/atomics-inlining.c @@ -76,8 +76,8 @@ void test1(void) { // MIPS32: store atomic i32 {{.*}}, i32* @i1 seq_cst // MIPS32: call i64 @__atomic_load_8(i8* bitcast (i64* @ll1 to i8*) // MIPS32: call void @__atomic_store_8(i8* bitcast (i64* @ll1 to i8*), i64 -// MIPS32: call void @__atomic_load(i32 zeroext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) -// MIPS32: call void @__atomic_store(i32 zeroext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) +// MIPS32: call void @__atomic_load(i32 signext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) +// MIPS32: call void @__atomic_store(i32 signext 100, i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a1, i32 0, i32 0), i8* getelementptr inbounds ([100 x i8], [100 x i8]* @a2, i32 0, i32 0) // MIPS64-LABEL: define void @test1 // MIPS64: = load atomic i8, i8* @c1 seq_cst diff --git a/clang/test/CodeGen/mips-unsigned-ext-var.c b/clang/test/CodeGen/mips-unsigned-ext-var.c new file mode 100644 index 00000000000..f6f6f0e26c9 --- /dev/null +++ b/clang/test/CodeGen/mips-unsigned-ext-var.c @@ -0,0 +1,22 @@ +// RUN: %clang -target mips64-unknown-linux -O2 -mabi=n64 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N64 +// RUN: %clang -target mips64-unknown-linux -O2 -mabi=n32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N32 +// RUN: %clang -target mips-unknown-linux -O2 -mabi=o32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=O32 + +#include <stdarg.h> + +unsigned foo(int x, ...) { + va_list valist; + va_start(valist, x); + unsigned a; + a = va_arg(valist, unsigned); + return a; +} + +void foo1() { + unsigned f = 0xffffffe0; + foo(1,f); +} + +//N64: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32) +//N32: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32) +//O32: call i32 (i32, ...) @foo(i32 signext undef, i32 signext -32)
\ No newline at end of file diff --git a/clang/test/CodeGen/mips-unsigned-extend.c b/clang/test/CodeGen/mips-unsigned-extend.c new file mode 100644 index 00000000000..2074967f14b --- /dev/null +++ b/clang/test/CodeGen/mips-unsigned-extend.c @@ -0,0 +1,15 @@ +// RUN: %clang -target mips64-unknown-linux -O0 -mabi=n64 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N64 +// RUN: %clang -target mips64-unknown-linux -O0 -mabi=n32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=N32 +// RUN: %clang -target mips-unknown-linux -O0 -mabi=o32 -S -emit-llvm %s -o - | FileCheck %s -check-prefix=O32 + +void foo(unsigned a) { +} + +void foo1() { + unsigned f = 0xffffffe0; + foo(f); +} + +// N64: call void @foo(i32 signext %0) +// N32: call void @foo(i32 signext %0) +// O32: call void @foo(i32 signext %0)
\ No newline at end of file |