Skip to content

Commit 7494f3d

Browse files
authored
[SPIRV] Added support for extension SPV_ALTERA_arbitrary_precision_fixed_point and name change of SPV_INTEL_arbitrary_precision_integers to SPV_ALTERA_arbitrary_precision_integers (llvm#136085)
--Added support for extension SPV_ALTERA_arbitrary_precision_fixed_point --Added test files for extension SPV_ALTERA_arbitrary_precision_fixed_point
1 parent 2e21bb8 commit 7494f3d

20 files changed

+433
-38
lines changed

llvm/docs/SPIRVUsage.rst

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ Static Compiler Commands
3030
Description: This command compiles an LLVM IL file (`input.ll`) to a SPIR-V binary (`output.spvt`) for a 32-bit architecture.
3131

3232
2. **Compilation with Extensions and Optimization**
33-
Command: `llc -O1 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_arbitrary_precision_integers input.ll -o output.spvt`
34-
Description: Compiles an LLVM IL file to SPIR-V with (`-O1`) optimizations, targeting a 64-bit architecture. It enables the SPV_INTEL_arbitrary_precision_integers extension.
33+
Command: `llc -O1 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_ALTERA_arbitrary_precision_integers input.ll -o output.spvt`
34+
Description: Compiles an LLVM IL file to SPIR-V with (`-O1`) optimizations, targeting a 64-bit architecture. It enables the SPV_ALTERA_arbitrary_precision_integers extension.
3535

3636
3. **Compilation with experimental NonSemantic.Shader.DebugInfo.100 support**
3737
Command: `llc --spv-emit-nonsemantic-debug-info --spirv-ext=+SPV_KHR_non_semantic_info input.ll -o output.spvt`
@@ -136,7 +136,7 @@ extensions to enable or disable, each prefixed with ``+`` or ``-``, respectively
136136

137137
To enable multiple extensions, list them separated by comma. For example, to enable support for atomic operations on floating-point numbers and arbitrary precision integers, use:
138138

139-
``-spirv-ext=+SPV_EXT_shader_atomic_float_add,+SPV_INTEL_arbitrary_precision_integers``
139+
``-spirv-ext=+SPV_EXT_shader_atomic_float_add,+SPV_ALTERA_arbitrary_precision_integers``
140140

141141
To enable all extensions, use the following option:
142142
``-spirv-ext=all``
@@ -145,7 +145,7 @@ To enable all KHR extensions, use the following option:
145145
``-spirv-ext=khr``
146146

147147
To enable all extensions except specified, specify ``all`` followed by a list of disallowed extensions. For example:
148-
``-spirv-ext=all,-SPV_INTEL_arbitrary_precision_integers``
148+
``-spirv-ext=all,-SPV_ALTERA_arbitrary_precision_integers``
149149

150150
Below is a list of supported SPIR-V extensions, sorted alphabetically by their extension names:
151151

@@ -171,7 +171,7 @@ Below is a list of supported SPIR-V extensions, sorted alphabetically by their e
171171
- Extends the SPV_EXT_shader_atomic_float_add and SPV_EXT_shader_atomic_float_min_max to support addition, minimum and maximum on 16-bit `bfloat16` floating-point numbers in memory.
172172
* - ``SPV_INTEL_2d_block_io``
173173
- Adds additional subgroup block prefetch, load, load transposed, load transformed and store instructions to read two-dimensional blocks of data from a two-dimensional region of memory, or to write two-dimensional blocks of data to a two dimensional region of memory.
174-
* - ``SPV_INTEL_arbitrary_precision_integers``
174+
* - ``SPV_ALTERA_arbitrary_precision_integers``
175175
- Allows generating arbitrary width integer types.
176176
* - ``SPV_INTEL_bindless_images``
177177
- Adds instructions to convert convert unsigned integer handles to images, samplers and sampled images.
@@ -245,6 +245,9 @@ Below is a list of supported SPIR-V extensions, sorted alphabetically by their e
245245
- Adds execution mode and capability to enable maximal reconvergence.
246246
* - ``SPV_ALTERA_blocking_pipes``
247247
- Adds new pipe read and write functions that have blocking semantics instead of the non-blocking semantics of the existing pipe read/write functions.
248+
* - ``SPV_ALTERA_arbitrary_precision_fixed_point``
249+
- Add instructions for fixed point arithmetic. The extension works without SPV_ALTERA_arbitrary_precision_integers, but together they allow greater flexibility in representing arbitrary precision data types.
250+
248251

249252
SPIR-V representation in LLVM IR
250253
================================

llvm/lib/Target/SPIRV/SPIRVBuiltins.cpp

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,6 +2399,77 @@ static bool generateBlockingPipesInst(const SPIRV::IncomingCall *Call,
23992399
return buildOpFromWrapper(MIRBuilder, Opcode, Call, Register(0));
24002400
}
24012401

2402+
static bool buildAPFixedPointInst(const SPIRV::IncomingCall *Call,
2403+
unsigned Opcode, MachineIRBuilder &MIRBuilder,
2404+
SPIRVGlobalRegistry *GR) {
2405+
MachineRegisterInfo *MRI = MIRBuilder.getMRI();
2406+
SmallVector<uint32_t, 1> ImmArgs;
2407+
Register InputReg = Call->Arguments[0];
2408+
const Type *RetTy = GR->getTypeForSPIRVType(Call->ReturnType);
2409+
bool IsSRet = RetTy->isVoidTy();
2410+
2411+
if (IsSRet) {
2412+
const LLT ValTy = MRI->getType(InputReg);
2413+
Register ActualRetValReg = MRI->createGenericVirtualRegister(ValTy);
2414+
SPIRVType *InstructionType =
2415+
GR->getPointeeType(GR->getSPIRVTypeForVReg(InputReg));
2416+
InputReg = Call->Arguments[1];
2417+
auto InputType = GR->getTypeForSPIRVType(GR->getSPIRVTypeForVReg(InputReg));
2418+
Register PtrInputReg;
2419+
if (InputType->getTypeID() == llvm::Type::TypeID::TypedPointerTyID) {
2420+
LLT InputLLT = MRI->getType(InputReg);
2421+
PtrInputReg = MRI->createGenericVirtualRegister(InputLLT);
2422+
SPIRVType *PtrType =
2423+
GR->getPointeeType(GR->getSPIRVTypeForVReg(InputReg));
2424+
MachineMemOperand *MMO1 = MIRBuilder.getMF().getMachineMemOperand(
2425+
MachinePointerInfo(), MachineMemOperand::MOLoad,
2426+
InputLLT.getSizeInBytes(), Align(4));
2427+
MIRBuilder.buildLoad(PtrInputReg, InputReg, *MMO1);
2428+
MRI->setRegClass(PtrInputReg, &SPIRV::iIDRegClass);
2429+
GR->assignSPIRVTypeToVReg(PtrType, PtrInputReg, MIRBuilder.getMF());
2430+
}
2431+
2432+
for (unsigned index = 2; index < 7; index++) {
2433+
ImmArgs.push_back(getConstFromIntrinsic(Call->Arguments[index], MRI));
2434+
}
2435+
2436+
// Emit the instruction
2437+
auto MIB = MIRBuilder.buildInstr(Opcode)
2438+
.addDef(ActualRetValReg)
2439+
.addUse(GR->getSPIRVTypeID(InstructionType));
2440+
if (PtrInputReg)
2441+
MIB.addUse(PtrInputReg);
2442+
else
2443+
MIB.addUse(InputReg);
2444+
2445+
for (uint32_t Imm : ImmArgs)
2446+
MIB.addImm(Imm);
2447+
unsigned Size = ValTy.getSizeInBytes();
2448+
// Store result to the pointer passed in Arg[0]
2449+
MachineMemOperand *MMO = MIRBuilder.getMF().getMachineMemOperand(
2450+
MachinePointerInfo(), MachineMemOperand::MOStore, Size, Align(4));
2451+
MRI->setRegClass(ActualRetValReg, &SPIRV::pIDRegClass);
2452+
MIRBuilder.buildStore(ActualRetValReg, Call->Arguments[0], *MMO);
2453+
return true;
2454+
} else {
2455+
for (unsigned index = 1; index < 6; index++)
2456+
ImmArgs.push_back(getConstFromIntrinsic(Call->Arguments[index], MRI));
2457+
2458+
return buildOpFromWrapper(MIRBuilder, Opcode, Call,
2459+
GR->getSPIRVTypeID(Call->ReturnType), ImmArgs);
2460+
}
2461+
}
2462+
2463+
static bool generateAPFixedPointInst(const SPIRV::IncomingCall *Call,
2464+
MachineIRBuilder &MIRBuilder,
2465+
SPIRVGlobalRegistry *GR) {
2466+
const SPIRV::DemangledBuiltin *Builtin = Call->Builtin;
2467+
unsigned Opcode =
2468+
SPIRV::lookupNativeBuiltin(Builtin->Name, Builtin->Set)->Opcode;
2469+
2470+
return buildAPFixedPointInst(Call, Opcode, MIRBuilder, GR);
2471+
}
2472+
24022473
static bool
24032474
generateTernaryBitwiseFunctionINTELInst(const SPIRV::IncomingCall *Call,
24042475
MachineIRBuilder &MIRBuilder,
@@ -3061,6 +3132,8 @@ std::optional<bool> lowerBuiltin(const StringRef DemangledCall,
30613132
return generatePredicatedLoadStoreInst(Call.get(), MIRBuilder, GR);
30623133
case SPIRV::BlockingPipes:
30633134
return generateBlockingPipesInst(Call.get(), MIRBuilder, GR);
3135+
case SPIRV::ArbitraryPrecisionFixedPoint:
3136+
return generateAPFixedPointInst(Call.get(), MIRBuilder, GR);
30643137
}
30653138
return false;
30663139
}

llvm/lib/Target/SPIRV/SPIRVBuiltins.td

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ def TernaryBitwiseINTEL : BuiltinGroup;
7171
def Block2DLoadStore : BuiltinGroup;
7272
def Pipe : BuiltinGroup;
7373
def PredicatedLoadStore : BuiltinGroup;
74+
def ArbitraryPrecisionFixedPoint : BuiltinGroup;
7475
def BlockingPipes : BuiltinGroup;
7576

7677
//===----------------------------------------------------------------------===//
@@ -1181,6 +1182,19 @@ defm : DemangledNativeBuiltin<"__spirv_WritePipeBlockingINTEL", OpenCL_std, Bloc
11811182
defm : DemangledNativeBuiltin<"__spirv_ReadPipeBlockingINTEL", OpenCL_std, BlockingPipes, 0, 0, OpReadPipeBlockingALTERA>;
11821183
defm : DemangledNativeBuiltin<"__spirv_ReadClockKHR", OpenCL_std, KernelClock, 1, 1, OpReadClockKHR>;
11831184

1185+
//SPV_ALTERA_arbitrary_precision_fixed_point
1186+
defm : DemangledNativeBuiltin<"__spirv_FixedSqrtINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedSqrtALTERA>;
1187+
defm : DemangledNativeBuiltin<"__spirv_FixedRecipINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedRecipALTERA>;
1188+
defm : DemangledNativeBuiltin<"__spirv_FixedRsqrtINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedRsqrtALTERA>;
1189+
defm : DemangledNativeBuiltin<"__spirv_FixedSinINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedSinALTERA>;
1190+
defm : DemangledNativeBuiltin<"__spirv_FixedCosINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedCosALTERA>;
1191+
defm : DemangledNativeBuiltin<"__spirv_FixedSinCosINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedSinCosALTERA>;
1192+
defm : DemangledNativeBuiltin<"__spirv_FixedSinPiINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedSinPiALTERA>;
1193+
defm : DemangledNativeBuiltin<"__spirv_FixedCosPiINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedCosPiALTERA>;
1194+
defm : DemangledNativeBuiltin<"__spirv_FixedSinCosPiINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedSinCosPiALTERA>;
1195+
defm : DemangledNativeBuiltin<"__spirv_FixedLogINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedLogALTERA>;
1196+
defm : DemangledNativeBuiltin<"__spirv_FixedExpINTEL", OpenCL_std, ArbitraryPrecisionFixedPoint, 6 , 8, OpFixedExpALTERA>;
1197+
11841198
//===----------------------------------------------------------------------===//
11851199
// Class defining an atomic instruction on floating-point numbers.
11861200
//

llvm/lib/Target/SPIRV/SPIRVCommandLine.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>>
5353
SPIRV::Extension::Extension::SPV_GOOGLE_hlsl_functionality1},
5454
{"SPV_GOOGLE_user_type",
5555
SPIRV::Extension::Extension::SPV_GOOGLE_user_type},
56-
{"SPV_INTEL_arbitrary_precision_integers",
57-
SPIRV::Extension::Extension::SPV_INTEL_arbitrary_precision_integers},
56+
{"SPV_ALTERA_arbitrary_precision_integers",
57+
SPIRV::Extension::Extension::SPV_ALTERA_arbitrary_precision_integers},
5858
{"SPV_INTEL_cache_controls",
5959
SPIRV::Extension::Extension::SPV_INTEL_cache_controls},
6060
{"SPV_INTEL_float_controls2",
@@ -163,7 +163,11 @@ static const std::map<std::string, SPIRV::Extension::Extension, std::less<>>
163163
{"SPV_INTEL_kernel_attributes",
164164
SPIRV::Extension::Extension::SPV_INTEL_kernel_attributes},
165165
{"SPV_ALTERA_blocking_pipes",
166-
SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes}};
166+
SPIRV::Extension::Extension::SPV_ALTERA_blocking_pipes},
167+
{"SPV_INTEL_int4", SPIRV::Extension::Extension::SPV_INTEL_int4},
168+
{"SPV_ALTERA_arbitrary_precision_fixed_point",
169+
SPIRV::Extension::Extension::
170+
SPV_ALTERA_arbitrary_precision_fixed_point}};
167171

168172
bool SPIRVExtensionsParser::parse(cl::Option &O, StringRef ArgName,
169173
StringRef ArgValue,

llvm/lib/Target/SPIRV/SPIRVGlobalRegistry.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ unsigned SPIRVGlobalRegistry::adjustOpTypeIntWidth(unsigned Width) const {
155155
report_fatal_error("Unsupported integer width!");
156156
const SPIRVSubtarget &ST = cast<SPIRVSubtarget>(CurMF->getSubtarget());
157157
if (ST.canUseExtension(
158-
SPIRV::Extension::SPV_INTEL_arbitrary_precision_integers) ||
158+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_integers) ||
159159
ST.canUseExtension(SPIRV::Extension::SPV_INTEL_int4))
160160
return Width;
161161
if (Width <= 8)
@@ -183,11 +183,11 @@ SPIRVType *SPIRVGlobalRegistry::getOpTypeInt(unsigned Width,
183183
.addImm(SPIRV::Capability::Int4TypeINTEL);
184184
} else if ((!isPowerOf2_32(Width) || Width < 8) &&
185185
ST.canUseExtension(
186-
SPIRV::Extension::SPV_INTEL_arbitrary_precision_integers)) {
186+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_integers)) {
187187
MIRBuilder.buildInstr(SPIRV::OpExtension)
188-
.addImm(SPIRV::Extension::SPV_INTEL_arbitrary_precision_integers);
188+
.addImm(SPIRV::Extension::SPV_ALTERA_arbitrary_precision_integers);
189189
MIRBuilder.buildInstr(SPIRV::OpCapability)
190-
.addImm(SPIRV::Capability::ArbitraryPrecisionIntegersINTEL);
190+
.addImm(SPIRV::Capability::ArbitraryPrecisionIntegersALTERA);
191191
}
192192
return MIRBuilder.buildInstr(SPIRV::OpTypeInt)
193193
.addDef(createTypeVReg(MIRBuilder))

llvm/lib/Target/SPIRV/SPIRVInstrInfo.td

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -999,3 +999,27 @@ def OpReadPipeBlockingALTERA :Op<5946, (outs), (ins ID:$pipe, ID:$pointer, ID:$p
999999
"OpReadPipeBlockingALTERA $pipe $pointer $packetSize $packetAlignment">;
10001000
def OpWritePipeBlockingALTERA :Op<5946, (outs), (ins ID:$pipe, ID:$pointer, ID:$packetSize, ID:$packetAlignment),
10011001
"OpWritePipeBlockingALTERA $pipe $pointer $packetSize $packetAlignment">;
1002+
1003+
//SPV_ALTERA_arbitrary_precision_fixed_point
1004+
def OpFixedSqrtALTERA: Op<5923, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1005+
"$res = OpFixedSqrtALTERA $result_type $input $sign $l $rl $q $o">;
1006+
def OpFixedRecipALTERA: Op<5924, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1007+
"$res = OpFixedRecipALTERA $result_type $input $sign $l $rl $q $o">;
1008+
def OpFixedRsqrtALTERA: Op<5925, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1009+
"$res = OpFixedRsqrtALTERA $result_type $input $sign $l $rl $q $o">;
1010+
def OpFixedSinALTERA: Op<5926, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1011+
"$res = OpFixedSinALTERA $result_type $input $sign $l $rl $q $o">;
1012+
def OpFixedCosALTERA: Op<5927, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1013+
"$res = OpFixedCosALTERA $result_type $input $sign $l $rl $q $o">;
1014+
def OpFixedSinCosALTERA: Op<5928, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1015+
"$res = OpFixedSinCosALTERA $result_type $input $sign $l $rl $q $o">;
1016+
def OpFixedSinPiALTERA: Op<5929, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1017+
"$res = OpFixedSinPiALTERA $result_type $input $sign $l $rl $q $o">;
1018+
def OpFixedCosPiALTERA: Op<5930, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1019+
"$res = OpFixedCosPiALTERA $result_type $input $sign $l $rl $q $o">;
1020+
def OpFixedSinCosPiALTERA: Op<5931, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1021+
"$res = OpFixedSinCosPiALTERA $result_type $input $sign $l $rl $q $o">;
1022+
def OpFixedLogALTERA: Op<5932, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1023+
"$res = OpFixedLogALTERA $result_type $input $sign $l $rl $q $o">;
1024+
def OpFixedExpALTERA: Op<5933, (outs ID:$res), (ins TYPE:$result_type, ID:$input, i32imm:$sign, i32imm:$l, i32imm:$rl, i32imm:$q, i32imm:$o),
1025+
"$res = OpFixedExpALTERA $result_type $input $sign $l $rl $q $o">;

llvm/lib/Target/SPIRV/SPIRVLegalizerInfo.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ SPIRVLegalizerInfo::SPIRVLegalizerInfo(const SPIRVSubtarget &ST) {
128128

129129
bool IsExtendedInts =
130130
ST.canUseExtension(
131-
SPIRV::Extension::SPV_INTEL_arbitrary_precision_integers) ||
131+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_integers) ||
132132
ST.canUseExtension(SPIRV::Extension::SPV_KHR_bit_instructions) ||
133133
ST.canUseExtension(SPIRV::Extension::SPV_INTEL_int4);
134134
auto extendedScalarsAndVectors =

llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,6 +1692,27 @@ void addInstrRequirements(const MachineInstr &MI,
16921692
Reqs.addCapability(SPIRV::Capability::GroupNonUniformRotateKHR);
16931693
Reqs.addCapability(SPIRV::Capability::GroupNonUniform);
16941694
break;
1695+
case SPIRV::OpFixedCosALTERA:
1696+
case SPIRV::OpFixedSinALTERA:
1697+
case SPIRV::OpFixedCosPiALTERA:
1698+
case SPIRV::OpFixedSinPiALTERA:
1699+
case SPIRV::OpFixedExpALTERA:
1700+
case SPIRV::OpFixedLogALTERA:
1701+
case SPIRV::OpFixedRecipALTERA:
1702+
case SPIRV::OpFixedSqrtALTERA:
1703+
case SPIRV::OpFixedSinCosALTERA:
1704+
case SPIRV::OpFixedSinCosPiALTERA:
1705+
case SPIRV::OpFixedRsqrtALTERA:
1706+
if (!ST.canUseExtension(
1707+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_fixed_point))
1708+
report_fatal_error("This instruction requires the "
1709+
"following SPIR-V extension: "
1710+
"SPV_ALTERA_arbitrary_precision_fixed_point",
1711+
false);
1712+
Reqs.addExtension(
1713+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_fixed_point);
1714+
Reqs.addCapability(SPIRV::Capability::ArbitraryPrecisionFixedPointALTERA);
1715+
break;
16951716
case SPIRV::OpGroupIMulKHR:
16961717
case SPIRV::OpGroupFMulKHR:
16971718
case SPIRV::OpGroupBitwiseAndKHR:

llvm/lib/Target/SPIRV/SPIRVPreLegalizer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ generateAssignInstrs(MachineFunction &MF, SPIRVGlobalRegistry *GR,
509509

510510
bool IsExtendedInts =
511511
ST->canUseExtension(
512-
SPIRV::Extension::SPV_INTEL_arbitrary_precision_integers) ||
512+
SPIRV::Extension::SPV_ALTERA_arbitrary_precision_integers) ||
513513
ST->canUseExtension(SPIRV::Extension::SPV_KHR_bit_instructions) ||
514514
ST->canUseExtension(SPIRV::Extension::SPV_INTEL_int4);
515515

llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,7 @@ defm SPV_INTEL_io_pipes : ExtensionOperand<63, [EnvOpenCL]>;
318318
defm SPV_KHR_ray_tracing : ExtensionOperand<64, [EnvVulkan]>;
319319
defm SPV_KHR_ray_query : ExtensionOperand<65, [EnvVulkan]>;
320320
defm SPV_INTEL_fpga_memory_accesses : ExtensionOperand<66, [EnvOpenCL]>;
321-
defm SPV_INTEL_arbitrary_precision_integers : ExtensionOperand<67, [EnvOpenCL]>;
321+
defm SPV_ALTERA_arbitrary_precision_integers : ExtensionOperand<67, [EnvOpenCL]>;
322322
defm SPV_EXT_shader_atomic_float_add
323323
: ExtensionOperand<68, [EnvVulkan, EnvOpenCL]>;
324324
defm SPV_KHR_terminate_invocation : ExtensionOperand<69, [EnvVulkan]>;
@@ -390,6 +390,7 @@ defm SPV_KHR_maximal_reconvergence : ExtensionOperand<128, [EnvVulkan]>;
390390
defm SPV_INTEL_bfloat16_arithmetic
391391
: ExtensionOperand<129, [EnvVulkan, EnvOpenCL]>;
392392
defm SPV_INTEL_16bit_atomics : ExtensionOperand<130, [EnvVulkan, EnvOpenCL]>;
393+
defm SPV_ALTERA_arbitrary_precision_fixed_point : ExtensionOperand<131, [EnvOpenCL, EnvVulkan]>;
393394

394395
//===----------------------------------------------------------------------===//
395396
// Multiclass used to define Capabilities enum values and at the same time
@@ -549,7 +550,7 @@ defm ComputeDerivativeGroupLinearNV : CapabilityOperand<5350, 0, 0, [], []>;
549550
defm FragmentDensityEXT : CapabilityOperand<5291, 0, 0, [], [Shader]>;
550551
defm PhysicalStorageBufferAddressesEXT : CapabilityOperand<5347, 0, 0, [], [Shader]>;
551552
defm CooperativeMatrixNV : CapabilityOperand<5357, 0, 0, [], [Shader]>;
552-
defm ArbitraryPrecisionIntegersINTEL : CapabilityOperand<5844, 0, 0, [SPV_INTEL_arbitrary_precision_integers], [Int8, Int16]>;
553+
defm ArbitraryPrecisionIntegersALTERA : CapabilityOperand<5844, 0, 0, [SPV_ALTERA_arbitrary_precision_integers], [Int8, Int16]>;
553554
defm OptNoneINTEL : CapabilityOperand<6094, 0, 0, [SPV_INTEL_optnone], []>;
554555
defm OptNoneEXT : CapabilityOperand<6094, 0, 0, [SPV_EXT_optnone], []>;
555556
defm BitInstructions : CapabilityOperand<6025, 0, 0, [SPV_KHR_bit_instructions], []>;
@@ -615,6 +616,7 @@ defm BFloat16TypeKHR : CapabilityOperand<5116, 0, 0, [SPV_KHR_bfloat16], []>;
615616
defm BFloat16DotProductKHR : CapabilityOperand<5117, 0, 0, [SPV_KHR_bfloat16], [BFloat16TypeKHR]>;
616617
defm BFloat16CooperativeMatrixKHR : CapabilityOperand<5118, 0, 0, [SPV_KHR_bfloat16], [BFloat16TypeKHR, CooperativeMatrixKHR]>;
617618
defm BlockingPipesALTERA : CapabilityOperand<5945, 0, 0, [SPV_ALTERA_blocking_pipes], []>;
619+
defm ArbitraryPrecisionFixedPointALTERA : CapabilityOperand<5922, 0, 0, [SPV_ALTERA_arbitrary_precision_fixed_point], []>;
618620

619621
//===----------------------------------------------------------------------===//
620622
// Multiclass used to define SourceLanguage enum values and at the same time

0 commit comments

Comments
 (0)