[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