summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-12-17 21:05:49 +0000
committerChris Lattner <sabre@nondot.org>2005-12-17 21:05:49 +0000
commite39ab718c059ead78a49b121e0037e7ed0661f35 (patch)
treecd455802667f35514ad1651772aa87e1ce5d7397 /llvm
parentea752cc50aae0a370deb1706463551d1ff8092a1 (diff)
downloadbcm5719-llvm-e39ab718c059ead78a49b121e0037e7ed0661f35.tar.gz
bcm5719-llvm-e39ab718c059ead78a49b121e0037e7ed0661f35.zip
add andn/orn/xorn patterns. This allows us to compile this:
long %test(ubyte, short, long %X, long %Y) { %A = xor long %X, -1 %B = and long %Y, %A ret long %B } to this: test: save -96, %sp, %sp andn %i4, %i2, %i0 andn %i5, %i3, %i1 restore %g0, %g0, %g0 retl nop instead of this: test: save -96, %sp, %sp xor %i2, -1, %l0 xor %i3, -1, %l1 and %i4, %l0, %i0 and %i5, %l1, %i1 restore %g0, %g0, %g0 retl nop The simpleisel emits: :( test: save -96, %sp, %sp or %g0, -1, %l0 or %g0, -1, %l0 or %g0, -1, %l0 or %g0, -1, %l1 xor %i2, %l0, %l0 xor %i3, %l1, %l1 and %i4, %l0, %i0 and %i5, %l1, %i1 restore %g0, %g0, %g0 retl nop llvm-svn: 24793
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/SparcV8/SparcV8InstrInfo.td9
1 files changed, 6 insertions, 3 deletions
diff --git a/llvm/lib/Target/SparcV8/SparcV8InstrInfo.td b/llvm/lib/Target/SparcV8/SparcV8InstrInfo.td
index efe40531c69..b1ecdde733c 100644
--- a/llvm/lib/Target/SparcV8/SparcV8InstrInfo.td
+++ b/llvm/lib/Target/SparcV8/SparcV8InstrInfo.td
@@ -250,7 +250,8 @@ def ANDCCri : F3_2<2, 0b010001,
"andcc $b, $c, $dst", []>;
def ANDNrr : F3_1<2, 0b000101,
(ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
- "andn $b, $c, $dst", []>;
+ "andn $b, $c, $dst",
+ [(set IntRegs:$dst, (and IntRegs:$b, (not IntRegs:$c)))]>;
def ANDNri : F3_2<2, 0b000101,
(ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
"andn $b, $c, $dst", []>;
@@ -276,7 +277,8 @@ def ORCCri : F3_2<2, 0b010010,
"orcc $b, $c, $dst", []>;
def ORNrr : F3_1<2, 0b000110,
(ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
- "orn $b, $c, $dst", []>;
+ "orn $b, $c, $dst",
+ [(set IntRegs:$dst, (or IntRegs:$b, (not IntRegs:$c)))]>;
def ORNri : F3_2<2, 0b000110,
(ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
"orn $b, $c, $dst", []>;
@@ -302,7 +304,8 @@ def XORCCri : F3_2<2, 0b010011,
"xorcc $b, $c, $dst", []>;
def XNORrr : F3_1<2, 0b000111,
(ops IntRegs:$dst, IntRegs:$b, IntRegs:$c),
- "xnor $b, $c, $dst", []>;
+ "xnor $b, $c, $dst",
+ [(set IntRegs:$dst, (xor IntRegs:$b, (not IntRegs:$c)))]>;
def XNORri : F3_2<2, 0b000111,
(ops IntRegs:$dst, IntRegs:$b, i32imm:$c),
"xnor $b, $c, $dst", []>;
OpenPOWER on IntegriCloud