[Sparc] Emit 'restore' instead of 'restore %g0, %g0, %g0'. This improves the readabil...
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>
Sat, 1 Mar 2014 01:04:26 +0000 (01:04 +0000)
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>
Sat, 1 Mar 2014 01:04:26 +0000 (01:04 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202563 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Sparc/InstPrinter/SparcInstPrinter.cpp
lib/Target/Sparc/SparcInstrAliases.td
test/CodeGen/SPARC/2011-01-11-FrameAddr.ll
test/CodeGen/SPARC/2011-01-19-DelaySlot.ll
test/MC/Disassembler/Sparc/sparc.txt
test/MC/Sparc/sparc-alu-instructions.s

index 0e44b31ae3806e039cbcbfcbd59761a141262112..239d4ef995863d46587407ad2ff3fe5f84c7b7ba 100644 (file)
 #include "llvm/Support/raw_ostream.h"
 using namespace llvm;
 
+// The generated AsmMatcher SparcGenAsmWriter uses "Sparc" as the target
+// namespace. But SPARC backend uses "SP" as its namespace.
+namespace llvm {
+namespace Sparc {
+  using namespace SP;
+}
+}
+
 #define GET_INSTRUCTION_NAME
 #define PRINT_ALIAS_INSTR
 #include "SparcGenAsmWriter.inc"
index 7242c59059ab68eacdf4373b82cea1eeb2e5cc46..efa792438473c504214aa891d4242c1af77573db 100644 (file)
@@ -140,3 +140,6 @@ def : InstAlias<"mov $rs2, $rd", (ORrr IntRegs:$rd, G0, IntRegs:$rs2)>;
 
 // mov simm13, rd -> or %g0, simm13, rd
 def : InstAlias<"mov $simm13, $rd", (ORri IntRegs:$rd, G0, i32imm:$simm13)>;
+
+// restore -> restore %g0, %g0, %g0
+def : InstAlias<"restore", (RESTORErr G0, G0, G0)>;
index 95f1684d688b06cae87885fdd17181107d28c281..050b76d514d128e1d865fb5e8b4a2868e8d85645 100644 (file)
@@ -21,7 +21,8 @@ entry:
 ;SPARC64:       save %sp, -128, %sp
 ;SPARC64:       add  %fp, 2047, %i0
 ;SPARC64:       ret
-;SPARC64:       restore %g0, %g0, %g0
+;SPARC64-NOT:   restore %g0, %g0, %g0
+;SPARC64:       restore
 
   %0 = tail call i8* @llvm.frameaddress(i32 0)
   ret i8* %0
index 8173d6da9311c8232c22016521075e163181e0ac..60bdf06dfd0300b4eea4cff3931e9ba4dbb4ae22 100644 (file)
@@ -141,7 +141,8 @@ entry:
 ;CHECK-LABEL:  restore_or_imm:
 ;CHECK:  or %o0, 20, %i0
 ;CHECK:  ret
-;CHECK:  restore %g0, %g0, %g0
+;CHECK-NOT:  restore %g0, %g0, %g0
+;CHECK:  restore
   %0 = tail call i32 @bar(i32 %a) nounwind
   %1 = or i32 %0, 20
   ret i32 %1
@@ -174,7 +175,8 @@ define i32 @restore_sethi_large(i32 %a) {
 entry:
 ;CHECK-LABEL: restore_sethi_large:
 ;CHECK: sethi  4000, %i0
-;CHECK: restore %g0, %g0, %g0
+;CHECK-NOT: restore %g0, %g0, %g0
+;CHECK:     restore
   %0 = tail call i32 @bar(i32 %a) nounwind
   %1 = icmp ne i32 %0, 0
   %2 = select i1 %1, i32 4096000, i32 0
index 388dd68717ebb7aab7d59a2bde26aeabbd9565fd..fefde2c7038bce11374ca0484256293c28376867 100644 (file)
 
 # CHECK: fbo 4194303
 0x1f 0xbf 0xff 0xff
+
+# CHECK: restore
+0x81 0xe8 0x00 0x00
index 5531bcca7aff131a28a50958b4e2f7662588068b..ef337b00329823ff7641809356b474d70cb035a4 100644 (file)
@@ -75,3 +75,6 @@
 
         ! CHECK: or %g0, 255, %g3     ! encoding: [0x86,0x10,0x20,0xff]
         mov 0xff, %g3
+
+        ! CHECK: restore              ! encoding: [0x81,0xe8,0x00,0x00]
+        restore %g0, %g0, %g0