Skip to content

Commit c777c01

Browse files
author
Thorsten Schütt
authored
[GlobalIsel] Import vscale (#88240)
#84542
1 parent b074f25 commit c777c01

File tree

2 files changed

+56
-0
lines changed

2 files changed

+56
-0
lines changed

llvm/lib/CodeGen/GlobalISel/IRTranslator.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2550,6 +2550,10 @@ bool IRTranslator::translateKnownIntrinsic(const CallInst &CI, Intrinsic::ID ID,
25502550
MIRBuilder.buildInstr(TargetOpcode::G_RESET_FPMODE, {}, {});
25512551
return true;
25522552
}
2553+
case Intrinsic::vscale: {
2554+
MIRBuilder.buildVScale(getOrCreateVReg(CI), 1);
2555+
return true;
2556+
}
25532557
case Intrinsic::prefetch: {
25542558
Value *Addr = CI.getOperand(0);
25552559
unsigned RW = cast<ConstantInt>(CI.getOperand(1))->getZExtValue();
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
; RUN: llc -O0 -mtriple=aarch64-linux-gnu -global-isel -stop-after=irtranslator %s -o - | FileCheck %s
3+
4+
define i64 @call_vscale_i64() {
5+
; CHECK-LABEL: name: call_vscale_i64
6+
; CHECK: bb.1.entry:
7+
; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s64) = G_VSCALE i64 1
8+
; CHECK-NEXT: $x0 = COPY [[VSCALE]](s64)
9+
; CHECK-NEXT: RET_ReallyLR implicit $x0
10+
entry:
11+
%vscale = call i64 @llvm.vscale.64()
12+
ret i64 %vscale
13+
}
14+
15+
define i64 @call_vscale_i32() {
16+
; CHECK-LABEL: name: call_vscale_i32
17+
; CHECK: bb.1.entry:
18+
; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s32) = G_VSCALE i32 1
19+
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[VSCALE]](s32)
20+
; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
21+
; CHECK-NEXT: RET_ReallyLR implicit $x0
22+
entry:
23+
%vscale = call i32 @llvm.vscale.32()
24+
%zext = zext i32 %vscale to i64
25+
ret i64 %zext
26+
}
27+
28+
define i64 @call_vscale_i16() {
29+
; CHECK-LABEL: name: call_vscale_i16
30+
; CHECK: bb.1.entry:
31+
; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s16) = G_VSCALE i16 1
32+
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[VSCALE]](s16)
33+
; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
34+
; CHECK-NEXT: RET_ReallyLR implicit $x0
35+
entry:
36+
%vscale = call i16 @llvm.vscale.16()
37+
%zext = zext i16 %vscale to i64
38+
ret i64 %zext
39+
}
40+
41+
define i64 @call_vscale_i8() {
42+
; CHECK-LABEL: name: call_vscale_i8
43+
; CHECK: bb.1.entry:
44+
; CHECK-NEXT: [[VSCALE:%[0-9]+]]:_(s8) = G_VSCALE i8 1
45+
; CHECK-NEXT: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[VSCALE]](s8)
46+
; CHECK-NEXT: $x0 = COPY [[ZEXT]](s64)
47+
; CHECK-NEXT: RET_ReallyLR implicit $x0
48+
entry:
49+
%vscale = call i8 @llvm.vscale.8()
50+
%zext = zext i8 %vscale to i64
51+
ret i64 %zext
52+
}

0 commit comments

Comments
 (0)