[llvm] r335065 - [Hexagon] Fix the value of HexagonII::TypeCVI_FIRST

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 19 11:09:54 PDT 2018


Author: kparzysz
Date: Tue Jun 19 11:09:54 2018
New Revision: 335065

URL: http://llvm.org/viewvc/llvm-project?rev=335065&view=rev
Log:
[Hexagon] Fix the value of HexagonII::TypeCVI_FIRST

This value is the first vector instruction type in numerical order. The
previous value was incorrect, leaving TypeCVI_GATHER outside of the range
for vector instructions. This caused vector .new instructions to be
incorrectly encoded in the presence of gather.

Added:
    llvm/trunk/test/MC/Hexagon/vgather-new.s
Modified:
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h

Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h?rev=335065&r1=335064&r2=335065&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h (original)
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonBaseInfo.h Tue Jun 19 11:09:54 2018
@@ -25,7 +25,7 @@ namespace llvm {
 /// HexagonII - This namespace holds all of the target specific flags that
 /// instruction info tracks.
 namespace HexagonII {
-  unsigned const TypeCVI_FIRST = TypeCVI_HIST;
+  unsigned const TypeCVI_FIRST = TypeCVI_4SLOT_MPY;
   unsigned const TypeCVI_LAST = TypeCVI_VX_LATE;
 
   enum SubTarget {

Added: llvm/trunk/test/MC/Hexagon/vgather-new.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/vgather-new.s?rev=335065&view=auto
==============================================================================
--- llvm/trunk/test/MC/Hexagon/vgather-new.s (added)
+++ llvm/trunk/test/MC/Hexagon/vgather-new.s Tue Jun 19 11:09:54 2018
@@ -0,0 +1,12 @@
+// RUN: llvm-mc -arch=hexagon -mcpu=hexagonv65 -mhvx -show-encoding %s -o - | FileCheck %s
+
+// TypeCVI_FIRST was set incorrectly, causing vgather not to be considered
+// a vector instruction. This resulted in an incorrect encoding of the vtmp.new
+// operand in the store.
+// CHECK: encoding: [0x1f,0x45,0x05,0x2f,0x22,0xc0,0x21,0x28]
+
+{
+  if (q0) vtmp.h = vgather(r5,m0,v31.h).h
+  vmem(r1+#0) = vtmp.new
+}
+




More information about the llvm-commits mailing list