From 89c84b0c832091ad707233aa2da41dfa6b2e0240 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Fri, 13 Mar 2015 22:18:18 +0000 Subject: [PATCH] Use add32ri8 and friends on fast isel. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This fixes pr22854. The core issue on the bug is that there are multiple instructions that print the same in assembly. In fact, there doesn't seem to be any syntax for specifying that a constant that fits in 8 bits should use a 32 bit immediate. The attached patch changes fast isel to consider i16immSExt8, i32immSExt8, and i64immSExt8. They were disabled because fastisel didn’t know to call the predicate back in the day. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@232223 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86InstrInfo.td | 10 +++++----- test/CodeGen/X86/add32ri8.ll | 10 ++++++++++ test/DebugInfo/X86/fission-ranges.ll | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 test/CodeGen/X86/add32ri8.ll diff --git a/lib/Target/X86/X86InstrInfo.td b/lib/Target/X86/X86InstrInfo.td index 13bfe2dc270..e9a04318be3 100644 --- a/lib/Target/X86/X86InstrInfo.td +++ b/lib/Target/X86/X86InstrInfo.td @@ -855,11 +855,11 @@ def X86_COND_E_OR_NE : ImmLeaf; -let FastIselShouldIgnore = 1 in { // FastIsel should ignore all simm8 instrs. - def i16immSExt8 : ImmLeaf; - def i32immSExt8 : ImmLeaf; - def i64immSExt8 : ImmLeaf; -} + +def i16immSExt8 : ImmLeaf; +def i32immSExt8 : ImmLeaf; +def i64immSExt8 : ImmLeaf; + def i64immSExt32 : ImmLeaf; diff --git a/test/CodeGen/X86/add32ri8.ll b/test/CodeGen/X86/add32ri8.ll new file mode 100644 index 00000000000..a74c37280cd --- /dev/null +++ b/test/CodeGen/X86/add32ri8.ll @@ -0,0 +1,10 @@ +; RUN: llc -mtriple=x86_64-linux -fast-isel -show-mc-encoding < %s | FileCheck %s + +; pr22854 +; CHECK: addl $42, %esi # encoding: [0x83,0xc6,0x2a] + +define void @foo(i32 *%s, i32 %x) { + %y = add nsw i32 %x, 42 + store i32 %y, i32* %s, align 4 + ret void +} diff --git a/test/DebugInfo/X86/fission-ranges.ll b/test/DebugInfo/X86/fission-ranges.ll index 625ca9830fd..a4c10fe1673 100644 --- a/test/DebugInfo/X86/fission-ranges.ll +++ b/test/DebugInfo/X86/fission-ranges.ll @@ -25,7 +25,7 @@ ; if they've changed due to a bugfix, change in register allocation, etc. ; CHECK: [[A]]: Beginning address index: 2 -; CHECK-NEXT: Length: 190 +; CHECK-NEXT: Length: 179 ; CHECK-NEXT: Location description: 11 00 ; CHECK-NEXT: {{^$}} ; CHECK-NEXT: Beginning address index: 3 -- 2.34.1