[Hexagon] Map dcfetch intrinsic to Y2_dcfetchbo, not Y2_dcfetch
authorKrzysztof Parzyszek <kparzysz@quicinc.com>
Fri, 28 Feb 2020 19:50:16 +0000 (13:50 -0600)
committerKrzysztof Parzyszek <kparzysz@quicinc.com>
Fri, 28 Feb 2020 20:19:20 +0000 (14:19 -0600)
llvm/lib/Target/Hexagon/HexagonDepMapAsm2Intrin.td
llvm/lib/Target/Hexagon/HexagonIntrinsics.td
llvm/test/CodeGen/Hexagon/isel-dcfetch-intrin-map.ll [new file with mode: 0644]

index d8d55b7..e9e0096 100644 (file)
@@ -1657,8 +1657,6 @@ def: Pat<(int_hexagon_S2_interleave DoubleRegs:$src1),
          (S2_interleave DoubleRegs:$src1)>, Requires<[HasV5]>;
 def: Pat<(int_hexagon_S2_deinterleave DoubleRegs:$src1),
          (S2_deinterleave DoubleRegs:$src1)>, Requires<[HasV5]>;
-def: Pat<(int_hexagon_Y2_dcfetch IntRegs:$src1),
-         (Y2_dcfetch IntRegs:$src1)>, Requires<[HasV5]>;
 def: Pat<(int_hexagon_Y2_dczeroa IntRegs:$src1),
          (Y2_dczeroa IntRegs:$src1)>, Requires<[HasV5]>;
 def: Pat<(int_hexagon_Y2_dccleana IntRegs:$src1),
index 4f0e7e8..df6b63c 100644 (file)
@@ -236,6 +236,8 @@ def: T_R_pat<Y2_dczeroa,     int_hexagon_Y2_dczeroa>;
 def: T_RR_pat<Y4_l2fetch,    int_hexagon_Y4_l2fetch>;
 def: T_RP_pat<Y5_l2fetch,    int_hexagon_Y5_l2fetch>;
 
+def: Pat<(int_hexagon_Y2_dcfetch I32:$Rt), (Y2_dcfetchbo I32:$Rt, 0)>;
+
 //
 // Patterns for optimizing code generations for HVX.
 
diff --git a/llvm/test/CodeGen/Hexagon/isel-dcfetch-intrin-map.ll b/llvm/test/CodeGen/Hexagon/isel-dcfetch-intrin-map.ll
new file mode 100644 (file)
index 0000000..6e9f1af
--- /dev/null
@@ -0,0 +1,18 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+
+; Check that intrinsic int_hexagon_Y2_dcfetch is mapped to Y2_dcfetchbo
+; (not Y2_dcfetch).
+
+; CHECK: dcfetch(r0+#0)
+
+target triple = "hexagon"
+
+define void @fred(i8* %a0) #0 {
+  call void @llvm.hexagon.Y2.dcfetch(i8* %a0)
+  ret void
+}
+
+declare void @llvm.hexagon.Y2.dcfetch(i8*) #0
+
+attributes #0 = { nounwind }
+