summaryrefslogtreecommitdiffstats
path: root/test/FrontendC
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2010-09-17 15:48:55 +0000
committerdim <dim@FreeBSD.org>2010-09-17 15:48:55 +0000
commit5d5cc59cc77afe655b3707cb0e69e0827b444cad (patch)
tree36453626c792cccd91f783a38a169d610a6b9db9 /test/FrontendC
parent786a18553586229ad99ecb5ecde8a9d914c45e27 (diff)
downloadFreeBSD-src-5d5cc59cc77afe655b3707cb0e69e0827b444cad.zip
FreeBSD-src-5d5cc59cc77afe655b3707cb0e69e0827b444cad.tar.gz
Vendor import of llvm r114020 (from the release_28 branch):
http://llvm.org/svn/llvm-project/llvm/branches/release_28@114020 Approved by: rpaulo (mentor)
Diffstat (limited to 'test/FrontendC')
-rw-r--r--test/FrontendC/2008-03-24-BitField-And-Alloca.c2
-rw-r--r--test/FrontendC/2010-05-18-asmsched.c4
-rw-r--r--test/FrontendC/2010-07-14-overconservative-align.c4
-rw-r--r--test/FrontendC/2010-07-14-ref-off-end.c4
-rw-r--r--test/FrontendC/2010-07-27-MinNoFoldConst.c18
-rw-r--r--test/FrontendC/2010-08-12-asm-aggr-arg.c16
-rw-r--r--test/FrontendC/asm-reg-var-local.c32
-rw-r--r--test/FrontendC/cstring-align.c14
-rw-r--r--test/FrontendC/misaligned-param.c15
-rw-r--r--test/FrontendC/vla-1.c5
-rw-r--r--test/FrontendC/vla-2.c10
11 files changed, 105 insertions, 19 deletions
diff --git a/test/FrontendC/2008-03-24-BitField-And-Alloca.c b/test/FrontendC/2008-03-24-BitField-And-Alloca.c
index 291f036..641bcf1 100644
--- a/test/FrontendC/2008-03-24-BitField-And-Alloca.c
+++ b/test/FrontendC/2008-03-24-BitField-And-Alloca.c
@@ -1,5 +1,5 @@
// RUN: %llvmgcc -O2 -S %s -o - | not grep alloca
-// RUN: %llvmgcc -m32 -O2 -S %s -o - | not grep store
+// RUN: %llvmgcc -m32 -O2 -S %s -o - | not grep {store }
enum {
PP_C,
diff --git a/test/FrontendC/2010-05-18-asmsched.c b/test/FrontendC/2010-05-18-asmsched.c
index 34abbe3..12e9140 100644
--- a/test/FrontendC/2010-05-18-asmsched.c
+++ b/test/FrontendC/2010-05-18-asmsched.c
@@ -1,4 +1,4 @@
-// RUN: %llvmgcc %s -c -O3 -m64 -emit-llvm -o - | llc -march=x86-64 -mtriple=x86_64-apple-darwin | FileCheck %s
+// RUN: %llvmgcc %s -c -O3 -emit-llvm -o - | llc -march=x86-64 -mtriple=x86_64-apple-darwin | FileCheck %s
// r9 used to be clobbered before its value was moved to r10. 7993104.
void foo(int x, int y) {
@@ -14,4 +14,4 @@ void foo(int x, int y) {
lr9 = x;
lr10 = foo;
asm volatile("bar" : "=r"(lr9) : "r"(lr9), "r"(lr10));
-} \ No newline at end of file
+}
diff --git a/test/FrontendC/2010-07-14-overconservative-align.c b/test/FrontendC/2010-07-14-overconservative-align.c
index 65fbdb8..1744ba8 100644
--- a/test/FrontendC/2010-07-14-overconservative-align.c
+++ b/test/FrontendC/2010-07-14-overconservative-align.c
@@ -1,4 +1,4 @@
-// RUN: %llvmgcc %s -emit-llvm -m64 -S -o - | FileCheck %s
+// RUN: %llvmgcc %s -emit-llvm -S -o - | FileCheck %s
// PR 5995
struct s {
int word;
@@ -9,6 +9,6 @@ struct s {
void func (struct s *s)
{
-// CHECK: load %struct.s** %s_addr, align 8
+// CHECK: load %struct.s** %s_addr, align {{[48]}}
s->word = 0;
}
diff --git a/test/FrontendC/2010-07-14-ref-off-end.c b/test/FrontendC/2010-07-14-ref-off-end.c
index 6ccd05b..c7fdd95 100644
--- a/test/FrontendC/2010-07-14-ref-off-end.c
+++ b/test/FrontendC/2010-07-14-ref-off-end.c
@@ -17,8 +17,8 @@ return(char)s->c;
}
main()
{
-// CHECK: getelementptr inbounds %struct.T* %t, i32 0, i32 0 ; <i32*> [#uses=2]
-// CHECK: getelementptr inbounds %struct.T* %t, i32 0, i32 0 ; <i32*> [#uses=2]
+// CHECK: getelementptr inbounds %struct.T* %t, i32 0, i32 0
+// CHECK: getelementptr inbounds %struct.T* %t, i32 0, i32 0
struct T t;
t.i=0xff;
t.c=0xffff11;
diff --git a/test/FrontendC/2010-07-27-MinNoFoldConst.c b/test/FrontendC/2010-07-27-MinNoFoldConst.c
new file mode 100644
index 0000000..7cd8b4c
--- /dev/null
+++ b/test/FrontendC/2010-07-27-MinNoFoldConst.c
@@ -0,0 +1,18 @@
+// RUN: %llvmgcc -S %s -o - | FileCheck %s
+extern int printf(const char *, ...);
+static void bad(unsigned int v1, unsigned int v2) {
+ printf("%u\n", 1631381461u * (((v2 - 1273463329u <= v1 - 1273463329u) ? v2 : v1) - 1273463329u) + 121322179u);
+}
+// Radar 8198362
+// GCC FE wants to convert the above to
+// 1631381461u * MIN(v2 - 1273463329u, v1 - 1273463329u)
+// and then to
+// MIN(1631381461u * v2 - 4047041419, 1631381461u * v1 - 4047041419)
+//
+// 1631381461u * 1273463329u = 2077504466193943669, but 32-bit overflow clips
+// this to 4047041419. This breaks the comparision implicit in the MIN().
+// Two multiply operations suggests the bad optimization is happening;
+// one multiplication, after the MIN(), is correct.
+// CHECK: mul
+// CHECK-NOT: mul
+// CHECK: ret
diff --git a/test/FrontendC/2010-08-12-asm-aggr-arg.c b/test/FrontendC/2010-08-12-asm-aggr-arg.c
new file mode 100644
index 0000000..81ec14b
--- /dev/null
+++ b/test/FrontendC/2010-08-12-asm-aggr-arg.c
@@ -0,0 +1,16 @@
+// RUN: %llvmgcc %s -S -O0 -o - | FileCheck %s
+// Radar 8288710: A small aggregate can be passed as an integer. Make sure
+// we don't get an error with "input constraint with a matching output
+// constraint of incompatible type!"
+
+struct wrapper {
+ int i;
+};
+
+// CHECK: xyz
+int test(int i) {
+ struct wrapper w;
+ w.i = i;
+ __asm__("xyz" : "=r" (w) : "0" (w));
+ return w.i;
+}
diff --git a/test/FrontendC/asm-reg-var-local.c b/test/FrontendC/asm-reg-var-local.c
new file mode 100644
index 0000000..22bd43c
--- /dev/null
+++ b/test/FrontendC/asm-reg-var-local.c
@@ -0,0 +1,32 @@
+// RUN: %llvmgcc %s -S -o - | FileCheck %s
+// Exercise various use cases for local asm "register variables".
+// XFAIL: *
+// XTARGET: x86_64,i686,i386
+
+int foo() {
+// CHECK: %a = alloca i32
+
+ register int a asm("rsi")=5;
+// CHECK: store i32 5, i32* %a, align 4
+
+ asm volatile("; %0 This asm defines rsi" : "=r"(a));
+// CHECK: %asmtmp = call i32 asm sideeffect "; $0 This asm defines rsi", "={rsi}
+// CHECK: store i32 %asmtmp, i32* %a
+
+ a = 42;
+// CHECK: store i32 42, i32* %a, align 4
+
+ asm volatile("; %0 This asm uses rsi" : : "r"(a));
+// CHECK: %1 = load i32* %a, align 4
+// CHECK: call void asm sideeffect "", "{rsi}"(i32 %1) nounwind
+// CHECK: %2 = call i32 asm sideeffect "", "={rsi}"() nounwind
+// CHECK: call void asm sideeffect "; $0 This asm uses rsi", "{rsi},~{dirflag},~{fpsr},~{flags}"(i32 %2)
+
+ return a;
+// CHECK: %3 = load i32* %a, align 4
+// CHECK: call void asm sideeffect "", "{rsi}"(i32 %3) nounwind
+// CHECK: %4 = call i32 asm sideeffect "", "={rsi}"() nounwind
+// CHECK: store i32 %4, i32* %0, align 4
+// CHECK: %5 = load i32* %0, align 4
+// CHECK: store i32 %5, i32* %retval, align 4
+}
diff --git a/test/FrontendC/cstring-align.c b/test/FrontendC/cstring-align.c
index b9ec281..764126e 100644
--- a/test/FrontendC/cstring-align.c
+++ b/test/FrontendC/cstring-align.c
@@ -1,6 +1,4 @@
-// RUN: %llvmgcc %s -c -Os -m32 -emit-llvm -o - | llc -march=x86 -mtriple=i386-apple-darwin10 | FileCheck %s -check-prefix=DARWIN32
-// RUN: %llvmgcc %s -c -Os -m64 -emit-llvm -o - | llc -march=x86-64 -mtriple=x86_64-apple-darwin10 | FileCheck %s -check-prefix=DARWIN64
-// XTARGET: darwin
+// RUN: %llvmgcc %s -c -Os -emit-llvm -o - | llc -march=x86 -mtriple=i386-apple-darwin10 | FileCheck %s
extern void func(const char *, const char *);
@@ -8,10 +6,6 @@ void long_function_name() {
func("%s: the function name", __func__);
}
-// DARWIN64: .align 4
-// DARWIN64: ___func__.
-// DARWIN64: .asciz "long_function_name"
-
-// DARWIN32: .align 4
-// DARWIN32: ___func__.
-// DARWIN32: .asciz "long_function_name"
+// CHECK: .align 4
+// CHECK: ___func__.
+// CHECK: .asciz "long_function_name"
diff --git a/test/FrontendC/misaligned-param.c b/test/FrontendC/misaligned-param.c
new file mode 100644
index 0000000..b4fcfe3
--- /dev/null
+++ b/test/FrontendC/misaligned-param.c
@@ -0,0 +1,15 @@
+// RUN: %llvmgcc %s -m32 -S -o - | FileCheck %s
+// Misaligned parameter must be memcpy'd to correctly aligned temporary.
+// XFAIL: *
+// XTARGET: i386-apple-darwin,i686-apple-darwin,x86_64-apple-darwin
+
+struct s { int x; long double y; };
+long double foo(struct s x, int i, struct s y) {
+// CHECK: foo
+// CHECK: %x_addr = alloca %struct.s, align 16
+// CHECK: %y_addr = alloca %struct.s, align 16
+// CHECK: memcpy
+// CHECK: memcpy
+// CHECK: bar
+ return bar(&x, &y);
+}
diff --git a/test/FrontendC/vla-1.c b/test/FrontendC/vla-1.c
index 76f6c53..77f78a5 100644
--- a/test/FrontendC/vla-1.c
+++ b/test/FrontendC/vla-1.c
@@ -1,5 +1,6 @@
-// RUN: true
-// %llvmgcc -std=gnu99 %s -S |& grep {error: "is greater than the stack alignment" }
+// RUN: %llvmgcc_only -std=gnu99 %s -S |& grep {warning: alignment for}
+// ppc does not support this feature, and gets a fatal error at runtime.
+// XFAIL: powerpc
int foo(int a)
{
diff --git a/test/FrontendC/vla-2.c b/test/FrontendC/vla-2.c
new file mode 100644
index 0000000..555cfc7
--- /dev/null
+++ b/test/FrontendC/vla-2.c
@@ -0,0 +1,10 @@
+// RUN: %llvmgcc -std=gnu99 %s -S -o - | grep ".*alloca.*align 16"
+
+extern void bar(int[]);
+
+void foo(int a)
+{
+ int var[a] __attribute__((__aligned__(16)));
+ bar(var);
+ return;
+}
OpenPOWER on IntegriCloud