[llvm] r306012 - [Hexagon] Handle a global operand to A2_addi when creating duplexes
Krzysztof Parzyszek via llvm-commits
llvm-commits at lists.llvm.org
Thu Jun 22 08:53:32 PDT 2017
Author: kparzysz
Date: Thu Jun 22 10:53:31 2017
New Revision: 306012
URL: http://llvm.org/viewvc/llvm-project?rev=306012&view=rev
Log:
[Hexagon] Handle a global operand to A2_addi when creating duplexes
Added:
llvm/trunk/test/CodeGen/Hexagon/duplex-addi-global-imm.mir
llvm/trunk/test/MC/Hexagon/duplex-addi-global-imm.s
Modified:
llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp?rev=306012&r1=306011&r2=306012&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonMCDuplexInfo.cpp Thu Jun 22 10:53:31 2017
@@ -701,33 +701,32 @@ MCInst HexagonMCInstrInfo::deriveSubInst
break;
case Hexagon::A2_addi:
Absolute = Inst.getOperand(2).getExpr()->evaluateAsAbsolute(Value);
- assert(Absolute);(void)Absolute;
- if (Value == 1) {
- Result.setOpcode(Hexagon::SA1_inc);
- addOps(Result, Inst, 0);
- addOps(Result, Inst, 1);
- break;
- } // 1,2 SUBInst $Rd = add($Rs, #1)
- else if (Value == -1) {
- Result.setOpcode(Hexagon::SA1_dec);
- addOps(Result, Inst, 0);
- addOps(Result, Inst, 1);
- addOps(Result, Inst, 2);
- break;
- } // 1,2 SUBInst $Rd = add($Rs,#-1)
- else if (Inst.getOperand(1).getReg() == Hexagon::R29) {
- Result.setOpcode(Hexagon::SA1_addsp);
- addOps(Result, Inst, 0);
- addOps(Result, Inst, 2);
- break;
- } // 1,3 SUBInst $Rd = add(r29, #$u6_2)
- else {
- Result.setOpcode(Hexagon::SA1_addi);
- addOps(Result, Inst, 0);
- addOps(Result, Inst, 1);
- addOps(Result, Inst, 2);
- break;
- } // 1,2,3 SUBInst $Rx = add($Rx, #$s7)
+ if (Absolute) {
+ if (Value == 1) {
+ Result.setOpcode(Hexagon::SA1_inc);
+ addOps(Result, Inst, 0);
+ addOps(Result, Inst, 1);
+ break;
+ } // 1,2 SUBInst $Rd = add($Rs, #1)
+ if (Value == -1) {
+ Result.setOpcode(Hexagon::SA1_dec);
+ addOps(Result, Inst, 0);
+ addOps(Result, Inst, 1);
+ addOps(Result, Inst, 2);
+ break;
+ } // 1,2 SUBInst $Rd = add($Rs,#-1)
+ if (Inst.getOperand(1).getReg() == Hexagon::R29) {
+ Result.setOpcode(Hexagon::SA1_addsp);
+ addOps(Result, Inst, 0);
+ addOps(Result, Inst, 2);
+ break;
+ } // 1,3 SUBInst $Rd = add(r29, #$u6_2)
+ }
+ Result.setOpcode(Hexagon::SA1_addi);
+ addOps(Result, Inst, 0);
+ addOps(Result, Inst, 1);
+ addOps(Result, Inst, 2);
+ break; // 1,2,3 SUBInst $Rx = add($Rx, #$s7)
case Hexagon::A2_add:
Result.setOpcode(Hexagon::SA1_addrx);
addOps(Result, Inst, 0);
Added: llvm/trunk/test/CodeGen/Hexagon/duplex-addi-global-imm.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Hexagon/duplex-addi-global-imm.mir?rev=306012&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Hexagon/duplex-addi-global-imm.mir (added)
+++ llvm/trunk/test/CodeGen/Hexagon/duplex-addi-global-imm.mir Thu Jun 22 10:53:31 2017
@@ -0,0 +1,22 @@
+# RUN: llc -march=hexagon -start-after if-converter %s -o - | FileCheck %s
+# This used to crash.
+# CHECK: add(r0,##g0)
+
+--- |
+ @g = global i32 0
+ define void @fred() {
+ ret void
+ }
+...
+
+---
+name: fred
+tracksRegLiveness: true
+
+body: |
+ bb.0:
+ liveins: %r0
+ %r0 = A2_addi %r0, @g
+ %r1 = A2_tfrsi 0
+...
+
Added: llvm/trunk/test/MC/Hexagon/duplex-addi-global-imm.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/duplex-addi-global-imm.s?rev=306012&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/duplex-addi-global-imm.s (added)
+++ llvm/trunk/test/MC/Hexagon/duplex-addi-global-imm.s Thu Jun 22 10:53:31 2017
@@ -0,0 +1,15 @@
+# RUN: llvm-mc -arch=hexagon -show-encoding %s | FileCheck %s
+# Check that we generate a duplex for this packet.
+# CHECK: encoding: [A,0x40'A',A,A,0x01'B',0x28'B',B,0x20'B']
+
+.data
+g:
+.long 0
+
+.text
+ {
+ r0 = add(r0,##g)
+ r1 = #0
+ }
+
+
More information about the llvm-commits
mailing list