summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Sparc
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-06-03 00:21:54 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-06-03 00:21:54 +0000
commit774fe2e29a21815d7d107c00dc52a37eb91ecbc5 (patch)
treedac391f5cf3a2a0ea32d09961e4d5749eb006d44 /llvm/lib/Target/Sparc
parentf3fabd2cb5bdeb6396e0bad7023750eca2f67674 (diff)
downloadbcm5719-llvm-774fe2e29a21815d7d107c00dc52a37eb91ecbc5.tar.gz
bcm5719-llvm-774fe2e29a21815d7d107c00dc52a37eb91ecbc5.zip
Sparc: When storing 0, use %g0 directly in the store instruction instead of
using two instructions (sethi and store). llvm-svn: 183090
Diffstat (limited to 'llvm/lib/Target/Sparc')
-rw-r--r--llvm/lib/Target/Sparc/SparcInstr64Bit.td4
-rw-r--r--llvm/lib/Target/Sparc/SparcInstrInfo.td4
2 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/SparcInstr64Bit.td b/llvm/lib/Target/Sparc/SparcInstr64Bit.td
index daafb432372..ed7f05f3c4b 100644
--- a/llvm/lib/Target/Sparc/SparcInstr64Bit.td
+++ b/llvm/lib/Target/Sparc/SparcInstr64Bit.td
@@ -286,6 +286,10 @@ def : Pat<(truncstorei16 i64:$src, ADDRri:$addr), (STHri ADDRri:$addr, $src)>;
def : Pat<(truncstorei32 i64:$src, ADDRrr:$addr), (STrr ADDRrr:$addr, $src)>;
def : Pat<(truncstorei32 i64:$src, ADDRri:$addr), (STri ADDRri:$addr, $src)>;
+// store 0, addr -> store %g0, addr
+def : Pat<(store (i64 0), ADDRrr:$dst), (STXrr ADDRrr:$dst, (i64 G0))>;
+def : Pat<(store (i64 0), ADDRri:$dst), (STXri ADDRri:$dst, (i64 G0))>;
+
} // Predicates = [Is64Bit]
diff --git a/llvm/lib/Target/Sparc/SparcInstrInfo.td b/llvm/lib/Target/Sparc/SparcInstrInfo.td
index 8f2ba2655ca..45ff113b72c 100644
--- a/llvm/lib/Target/Sparc/SparcInstrInfo.td
+++ b/llvm/lib/Target/Sparc/SparcInstrInfo.td
@@ -815,4 +815,8 @@ def : Pat<(i32 (extloadi16 ADDRri:$src)), (LDUHri ADDRri:$src)>;
def : Pat<(i32 (zextloadi1 ADDRrr:$src)), (LDUBrr ADDRrr:$src)>;
def : Pat<(i32 (zextloadi1 ADDRri:$src)), (LDUBri ADDRri:$src)>;
+// store 0, addr -> store %g0, addr
+def : Pat<(store (i32 0), ADDRrr:$dst), (STrr ADDRrr:$dst, (i32 G0))>;
+def : Pat<(store (i32 0), ADDRri:$dst), (STri ADDRri:$dst, (i32 G0))>;
+
include "SparcInstr64Bit.td"
OpenPOWER on IntegriCloud