Skip to content

Commit 9d7df23

Browse files
authored
[Hexagon] Add missing pattern for v8i1 type (llvm#120703)
HexagonISD::PFALSE and PTRUE patterns do not form independently in general as they are treated like operands of all 0s or all 1s. Eg: i32 = transfer HEXAGONISD::PFALSE. In this case, v8i1 = HEXAGONISD::PFALSE is formed independently without accompanying opcode. This patch adds a pattern to transfer all 0s or all 1s to a scalar register and then use that register and this PFALSE/PTRUE opcode to transfer to a predicate register like v8i1.
1 parent bbb53d1 commit 9d7df23

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

llvm/lib/Target/Hexagon/HexagonPatterns.td

+3
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,9 @@ def ptrue: PatFrag<(ops), (HexagonPTRUE)>;
108108
def pfalse: PatFrag<(ops), (HexagonPFALSE)>;
109109
def pnot: PatFrag<(ops node:$Pu), (xor node:$Pu, ptrue)>;
110110

111+
def: Pat<(v8i1 (HexagonPFALSE)), (C2_tfrrp (A2_tfrsi (i32 0)))>;
112+
def: Pat<(v8i1 (HexagonPTRUE)), (C2_tfrrp (A2_tfrsi (i32 -1)))>;
113+
111114
def valign: PatFrag<(ops node:$Vt, node:$Vs, node:$Ru),
112115
(HexagonVALIGN node:$Vt, node:$Vs, node:$Ru)>;
113116
def valignaddr: PatFrag<(ops node:$Addr), (HexagonVALIGNADDR node:$Addr)>;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
; Check if a C2_tfrrp instruction with constant i32 0 input is generated
2+
; The constant 0 is generated by a transfer immediate instruction.
3+
4+
; RUN: llc -march=hexagon -debug-only=isel 2>&1 < %s - | FileCheck %s
5+
6+
; CHECK: [[R0:%[0-9]+]]:intregs = A2_tfrsi 0
7+
; CHECK-NEXT: predregs = C2_tfrrp killed [[R0]]:intregs
8+
9+
define void @test_false(i1 %0) {
10+
%2 = insertelement <1024 x i1> zeroinitializer, i1 %0, i64 0
11+
tail call void @llvm.masked.store.v1024f32.p0(<1024 x float> zeroinitializer, ptr null, i32 1, <1024 x i1> %2)
12+
ret void
13+
}
14+
15+
declare void @llvm.masked.store.v1024f32.p0(<1024 x float>, ptr nocapture, i32 immarg, <1024 x i1>)

0 commit comments

Comments
 (0)