Skip to content

Commit 9c8e84c

Browse files
vmustyaigcbot
authored andcommitted
Fix legalization of r0 intrinsic in VC
.
1 parent 24c1d1e commit 9c8e84c

File tree

2 files changed

+53
-2
lines changed

2 files changed

+53
-2
lines changed

IGC/VectorCompiler/lib/GenXCodeGen/GenXLegalization.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -588,8 +588,17 @@ bool GenXLegalization::checkInst(const Instruction *Inst) const {
588588
return false; // ignore terminator
589589
if (isa<PHINode>(Inst))
590590
return false; // ignore phi node
591-
if (GenXIntrinsic::isReadWritePredefReg(Inst))
592-
return false; // ignore predef regs
591+
592+
// ignore predef regs
593+
switch (auto IID = vc::getAnyIntrinsicID(Inst)) {
594+
default:
595+
if (GenXIntrinsic::isReadWritePredefReg(IID))
596+
return false;
597+
break;
598+
case GenXIntrinsic::genx_r0:
599+
case GenXIntrinsic::genx_sr0:
600+
return false;
601+
}
593602

594603
// Sanity check for illegal operand type
595604
const auto *ScalarType = Inst->getType()->getScalarType();
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
;=========================== begin_copyright_notice ============================
2+
;
3+
; Copyright (C) 2024 Intel Corporation
4+
;
5+
; SPDX-License-Identifier: MIT
6+
;
7+
;============================ end_copyright_notice =============================
8+
9+
; RUN: %opt %use_old_pass_manager% -GenXLegalization -march=genx64 -mcpu=XeHPC -mtriple=spir64-unknown-unknown -S < %s | FileCheck %s
10+
11+
declare <16 x i32> @llvm.genx.r0.v16i32()
12+
declare <4 x i32> @llvm.genx.sr0.v4i32()
13+
declare <4 x i32> @llvm.genx.read.predef.reg.v4i32.v4i32(i32, <4 x i32>)
14+
declare <4 x i32> @llvm.genx.write.predef.reg.v4i32.v4i32(i32, <4 x i32>)
15+
16+
; CHECK-LABEL: test_r0
17+
define <16 x i32> @test_r0() {
18+
; CHECK: %r0 = call <16 x i32> @llvm.genx.r0.v16i32()
19+
%r0 = call <16 x i32> @llvm.genx.r0.v16i32()
20+
ret <16 x i32> %r0
21+
}
22+
23+
; CHECK-LABEL: test_sr0
24+
define <4 x i32> @test_sr0() {
25+
; CHECK: %sr0 = call <4 x i32> @llvm.genx.sr0.v4i32()
26+
%sr0 = call <4 x i32> @llvm.genx.sr0.v4i32()
27+
ret <4 x i32> %sr0
28+
}
29+
30+
; CHECK-LABEL: test_read_predefined
31+
define <4 x i32> @test_read_predefined() {
32+
; CHECK: %cr0 = call <4 x i32> @llvm.genx.read.predef.reg.v4i32.v4i32(i32 14, <4 x i32> undef)
33+
%cr0 = call <4 x i32> @llvm.genx.read.predef.reg.v4i32.v4i32(i32 14, <4 x i32> undef)
34+
ret <4 x i32> %cr0
35+
}
36+
37+
; CHECK-LABEL: test_write_predefined
38+
define <4 x i32> @test_write_predefined(<4 x i32> %cr0) {
39+
; CHECK: %new = call <4 x i32> @llvm.genx.write.predef.reg.v4i32.v4i32(i32 14, <4 x i32> %cr0)
40+
%new = call <4 x i32> @llvm.genx.write.predef.reg.v4i32.v4i32(i32 14, <4 x i32> %cr0)
41+
ret <4 x i32> %new
42+
}

0 commit comments

Comments
 (0)