MIR Parser: Report an error when parsing large immediate operands.
authorAlex Lorenz <arphaman@gmail.com>
Wed, 5 Aug 2015 19:03:42 +0000 (19:03 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Wed, 5 Aug 2015 19:03:42 +0000 (19:03 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@244100 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/MIRParser/MIParser.cpp
test/CodeGen/MIR/X86/large-immediate-operand-error.mir [new file with mode: 0644]

index 15f93eea87fdd1ed2f0d0d4a252184537e475805..a30a4a9a83fdabcd6214779de7f0291443dce35d 100644 (file)
@@ -552,8 +552,7 @@ bool MIParser::parseImmediateOperand(MachineOperand &Dest) {
   assert(Token.is(MIToken::IntegerLiteral));
   const APSInt &Int = Token.integerValue();
   if (Int.getMinSignedBits() > 64)
-    // TODO: Replace this with an error when we can parse CIMM Machine Operands.
-    llvm_unreachable("Can't parse large integer literals yet!");
+    return error("integer literal is too large to be an immediate operand");
   Dest = MachineOperand::CreateImm(Int.getExtValue());
   lex();
   return false;
diff --git a/test/CodeGen/MIR/X86/large-immediate-operand-error.mir b/test/CodeGen/MIR/X86/large-immediate-operand-error.mir
new file mode 100644 (file)
index 0000000..fead666
--- /dev/null
@@ -0,0 +1,20 @@
+# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+
+--- |
+
+  define i32 @foo() {
+  entry:
+    ret i32 42
+  }
+
+...
+---
+name:            foo
+body:
+ - id:           0
+   name:         entry
+   instructions:
+# CHECK: [[@LINE+1]]:24: integer literal is too large to be an immediate operand
+     - '%eax = MOV32ri 12346127502983478823754212949184914'
+     - 'RETQ %eax'
+...