From fcca6c690cc86123f175582772cb1554cc7e8d81 Mon Sep 17 00:00:00 2001 From: Quentin Colombet Date: Fri, 7 Jun 2013 18:36:03 +0000 Subject: Teach AsmPrinter how to print odd constants. Fix an assertion when the compiler encounters big constants whose bit width is not a multiple of 64-bits. Although clang would never generate something like this, the backend should be able to handle any legal IR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@183544 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGen/ARM/emit-big-cst.ll | 18 ++++++++++++++++++ test/CodeGen/Mips/emit-big-cst.ll | 17 +++++++++++++++++ test/CodeGen/X86/emit-big-cst.ll | 17 +++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 test/CodeGen/ARM/emit-big-cst.ll create mode 100644 test/CodeGen/Mips/emit-big-cst.ll create mode 100644 test/CodeGen/X86/emit-big-cst.ll (limited to 'test') diff --git a/test/CodeGen/ARM/emit-big-cst.ll b/test/CodeGen/ARM/emit-big-cst.ll new file mode 100644 index 0000000..9a3367d --- /dev/null +++ b/test/CodeGen/ARM/emit-big-cst.ll @@ -0,0 +1,18 @@ +; RUN: llc -mtriple=thumbv7-unknown-unknown < %s | FileCheck %s +; Check assembly printing of odd constants. + +; CHECK: bigCst: +; CHECK-NEXT: .long 1694510592 +; CHECK-NEXT: .long 2960197 +; CHECK-NEXT: .long 26220 +; CHECK-NEXT: .size bigCst, 12 + +@bigCst = internal constant i82 483673642326615442599424 + +define void @accessBig(i64* %storage) { + %addr = bitcast i64* %storage to i82* + %bigLoadedCst = load volatile i82* @bigCst + %tmp = add i82 %bigLoadedCst, 1 + store i82 %tmp, i82* %addr + ret void +} diff --git a/test/CodeGen/Mips/emit-big-cst.ll b/test/CodeGen/Mips/emit-big-cst.ll new file mode 100644 index 0000000..a168743 --- /dev/null +++ b/test/CodeGen/Mips/emit-big-cst.ll @@ -0,0 +1,17 @@ +; RUN: llc -march=mips < %s | FileCheck %s +; Check assembly printing of odd constants. + +; CHECK: bigCst: +; CHECK-NEXT: .8byte 1845068520838224192 +; CHECK-NEXT: .8byte 11776 +; CHECK-NEXT: .size bigCst, 16 + +@bigCst = internal constant i82 483673642326615442599424 + +define void @accessBig(i64* %storage) { + %addr = bitcast i64* %storage to i82* + %bigLoadedCst = load volatile i82* @bigCst + %tmp = add i82 %bigLoadedCst, 1 + store i82 %tmp, i82* %addr + ret void +} diff --git a/test/CodeGen/X86/emit-big-cst.ll b/test/CodeGen/X86/emit-big-cst.ll new file mode 100644 index 0000000..96c15d4 --- /dev/null +++ b/test/CodeGen/X86/emit-big-cst.ll @@ -0,0 +1,17 @@ +; RUN: llc -mtriple=x86_64-unknown-unknown < %s | FileCheck %s +; Check assembly printing of odd constants. + +; CHECK: bigCst: +; CHECK-NEXT: .quad 12713950999227904 +; CHECK-NEXT: .quad 26220 +; CHECK-NEXT: .size bigCst, 16 + +@bigCst = internal constant i82 483673642326615442599424 + +define void @accessBig(i64* %storage) { + %addr = bitcast i64* %storage to i82* + %bigLoadedCst = load volatile i82* @bigCst + %tmp = add i82 %bigLoadedCst, 1 + store i82 %tmp, i82* %addr + ret void +} -- cgit v1.1