aboutsummaryrefslogtreecommitdiffstats
path: root/test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2012-03-20 08:56:43 +0000
committerBill Wendling <isanbard@gmail.com>2012-03-20 08:56:43 +0000
commit21e42d0ea55c31ac4d57578f5116fa606d5c87ee (patch)
tree968a83337cefdcf191a49ca86b54a90ed8936966 /test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll
parent89f4e6639d174d20f8be59af4895d7d851e4f624 (diff)
downloadexternal_llvm-21e42d0ea55c31ac4d57578f5116fa606d5c87ee.zip
external_llvm-21e42d0ea55c31ac4d57578f5116fa606d5c87ee.tar.gz
external_llvm-21e42d0ea55c31ac4d57578f5116fa606d5c87ee.tar.bz2
It's possible to have a constant expression who's size is quite big (e.g.,
i128). In that case, we may not be able to print out the MCExpr as an expression. For instance, we could have an MCExpr like this: 0xBEEF0000BEEF0000 | (0xBEEF0000BEEF0000 << 64) The MCExpr printer handles sizes up to 64-bits, but this expression would require 128-bits. In this situation, try to evaluate the constant expression and emit that as the value into 64-bit chunks. <rdar://problem/11070338> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153081 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll')
-rw-r--r--test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll b/test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll
new file mode 100644
index 0000000..d24647e
--- /dev/null
+++ b/test/CodeGen/X86/2012-03-20-LargeConstantExpr.ll
@@ -0,0 +1,17 @@
+; RUN: llc < %s -mtriple=x86_64-apple-darwin | FileCheck %s
+; <rdar://problem/11070338>
+target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+target triple = "x86_64-apple-macosx10.8.0"
+
+; CHECK: _.memset_pattern:
+; CHECK-NEXT: .quad 4575657222473777152
+; CHECK-NEXT: .quad 4575657222473777152
+
+@.memset_pattern = internal unnamed_addr constant i128 or (i128 zext (i64 bitcast (<2 x float> <float 1.000000e+00, float 1.000000e+00> to i64) to i128), i128 shl (i128 zext (i64 bitcast (<2 x float> <float 1.000000e+00, float 1.000000e+00> to i64) to i128), i128 64)), align 16
+
+define void @foo(i8* %a, i64 %b) {
+ call void @memset_pattern16(i8* %a, i8* bitcast (i128* @.memset_pattern to i8*), i64 %b)
+ ret void
+}
+
+declare void @memset_pattern16(i8*, i8*, i64)