Skip to content

Commit ed37b6d

Browse files
MrSidimsvmaksimo
authored andcommitted
Move assume/expect to spirv_internal.hpp (#832)
SPV_INTEL_optimization_hints isn't going to be upstreamed to SPIR-V Headers repository, therefore this patch is needed. Also it serves a purpose to show, how can extensions be implemented using spirv_internal.hpp. Signed-off-by: Dmitry Sidorov <dmitry.sidorov@intel.com>
1 parent cf4dff1 commit ed37b6d

File tree

10 files changed

+34
-18
lines changed

10 files changed

+34
-18
lines changed

llvm-spirv/lib/SPIRV/SPIRVReader.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1804,7 +1804,8 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
18041804
}
18051805

18061806
// Translation of instructions
1807-
switch (BV->getOpCode()) {
1807+
int OpCode = BV->getOpCode();
1808+
switch (OpCode) {
18081809
case OpBranch: {
18091810
auto *BR = static_cast<SPIRVBranch *>(BV);
18101811
auto *BI = BranchInst::Create(
@@ -2416,14 +2417,14 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
24162417
return mapValue(BV, Call);
24172418
}
24182419

2419-
case OpAssumeTrueINTEL: {
2420+
case internal::OpAssumeTrueINTEL: {
24202421
IRBuilder<> Builder(BB);
24212422
SPIRVAssumeTrueINTEL *BC = static_cast<SPIRVAssumeTrueINTEL *>(BV);
24222423
Value *Condition = transValue(BC->getCondition(), F, BB);
24232424
return mapValue(BV, Builder.CreateAssumption(Condition));
24242425
}
24252426

2426-
case OpExpectINTEL: {
2427+
case internal::OpExpectINTEL: {
24272428
IRBuilder<> Builder(BB);
24282429
SPIRVExpectINTELInstBase *BC = static_cast<SPIRVExpectINTELInstBase *>(BV);
24292430
Type *RetTy = transType(BC->getType());

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVEntry.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,10 @@ SPIRVEntry *SPIRVEntry::create(Op OpCode) {
7272

7373
static TableEntry Table[] = {
7474
#define _SPIRV_OP(x, ...) {Op##x, &SPIRV::create<SPIRV##x>},
75+
#define _SPIRV_OP_INTERNAL(x, ...) {internal::Op##x, &SPIRV::create<SPIRV##x>},
7576
#include "SPIRVOpCodeEnum.h"
77+
#include "SPIRVOpCodeEnumInternal.h"
78+
#undef _SPIRV_OP_INTERNAL
7679
#undef _SPIRV_OP
7780
};
7881

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVInstruction.h

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2828,7 +2828,7 @@ _SPIRV_OP(GenericCastToPtrExplicit, true, 5, false, 1)
28282828

28292829
class SPIRVAssumeTrueINTEL : public SPIRVInstruction {
28302830
public:
2831-
static const Op OC = OpAssumeTrueINTEL;
2831+
static const Op OC = internal::OpAssumeTrueINTEL;
28322832
static const SPIRVWord FixedWordCount = 2;
28332833

28342834
SPIRVAssumeTrueINTEL(SPIRVId TheCondition, SPIRVBasicBlock *BB)
@@ -2845,7 +2845,7 @@ class SPIRVAssumeTrueINTEL : public SPIRVInstruction {
28452845
}
28462846

28472847
SPIRVCapVec getRequiredCapability() const override {
2848-
return getVec(CapabilityOptimizationHintsINTEL);
2848+
return getVec(internal::CapabilityOptimizationHintsINTEL);
28492849
}
28502850

28512851
llvm::Optional<ExtensionID> getRequiredExtension() const override {
@@ -2866,19 +2866,20 @@ class SPIRVAssumeTrueINTEL : public SPIRVInstruction {
28662866
class SPIRVExpectINTELInstBase : public SPIRVInstTemplateBase {
28672867
protected:
28682868
SPIRVCapVec getRequiredCapability() const override {
2869-
return getVec(CapabilityOptimizationHintsINTEL);
2869+
return getVec(internal::CapabilityOptimizationHintsINTEL);
28702870
}
28712871

28722872
llvm::Optional<ExtensionID> getRequiredExtension() const override {
28732873
return ExtensionID::SPV_INTEL_optimization_hints;
28742874
}
28752875
};
28762876

2877-
#define _SPIRV_OP(x, ...) \
2878-
typedef SPIRVInstTemplate<SPIRVExpectINTELInstBase, Op##x, __VA_ARGS__> \
2877+
#define _SPIRV_OP_INTERNAL(x, ...) \
2878+
typedef SPIRVInstTemplate<SPIRVExpectINTELInstBase, internal::Op##x, \
2879+
__VA_ARGS__> \
28792880
SPIRV##x;
2880-
_SPIRV_OP(ExpectINTEL, true, 5)
2881-
#undef _SPIRV_OP
2881+
_SPIRV_OP_INTERNAL(ExpectINTEL, true, 5)
2882+
#undef _SPIRV_OP_INTERNAL
28822883

28832884
class SPIRVSubgroupShuffleINTELInstBase : public SPIRVInstTemplateBase {
28842885
protected:

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVModule.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1525,7 +1525,7 @@ SPIRVInstruction *SPIRVModuleImpl::addExpectINTELInst(SPIRVType *ResultTy,
15251525
SPIRVValue *ExpectedValue,
15261526
SPIRVBasicBlock *BB) {
15271527
return addInstruction(SPIRVInstTemplateBase::create(
1528-
OpExpectINTEL, ResultTy, getId(),
1528+
internal::OpExpectINTEL, ResultTy, getId(),
15291529
getVec(Value->getId(), ExpectedValue->getId()), BB,
15301530
this),
15311531
BB);

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVNameMapEnum.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ template <> inline void SPIRVMap<Capability, std::string>::init() {
480480
add(CapabilityAsmINTEL, "AsmINTEL");
481481
add(CapabilityVectorComputeINTEL, "VectorComputeINTEL");
482482
add(CapabilityVectorAnyINTEL, "VectorAnyINTEL");
483-
add(CapabilityOptimizationHintsINTEL, "OptimizationHintsINTEL");
483+
add(internal::CapabilityOptimizationHintsINTEL, "OptimizationHintsINTEL");
484484
add(CapabilitySubgroupAvcMotionEstimationINTEL,
485485
"SubgroupAvcMotionEstimationINTEL");
486486
add(CapabilitySubgroupAvcMotionEstimationIntraINTEL,

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ template <> inline void SPIRVMap<Op, std::string>::init() {
5252
#define _SPIRV_OP(x, ...) add(Op##x, #x);
5353
#define _SPIRV_OP_INTERNAL(x, ...) add(internal::Op##x, #x);
5454
#include "SPIRVOpCodeEnum.h"
55-
_SPIRV_OP_INTERNAL(Forward, internal::OpForward)
55+
#include "SPIRVOpCodeEnumInternal.h"
5656
#undef _SPIRV_OP_INTERNAL
5757
#undef _SPIRV_OP
5858
}

llvm-spirv/lib/SPIRV/libSPIRV/SPIRVOpCodeEnum.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,8 +341,6 @@ _SPIRV_OP(FunctionPointerCallINTEL, 5601)
341341
_SPIRV_OP(AsmTargetINTEL, 5609)
342342
_SPIRV_OP(AsmINTEL, 5610)
343343
_SPIRV_OP(AsmCallINTEL, 5611)
344-
_SPIRV_OP(AssumeTrueINTEL, 5630)
345-
_SPIRV_OP(ExpectINTEL, 5631)
346344
_SPIRV_OP(VmeImageINTEL, 5699)
347345
_SPIRV_OP(TypeVmeImageINTEL, 5700)
348346
_SPIRV_OP(TypeAvcImePayloadINTEL, 5701)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
#include "spirv_internal.hpp"
2+
3+
_SPIRV_OP_INTERNAL(AssumeTrueINTEL, internal::OpAssumeTrueINTEL)
4+
_SPIRV_OP_INTERNAL(ExpectINTEL, internal::OpExpectINTEL)
5+
_SPIRV_OP_INTERNAL(Forward, internal::OpForward)

llvm-spirv/lib/SPIRV/libSPIRV/spirv.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -970,7 +970,6 @@ enum Capability {
970970
CapabilityAsmINTEL = 5606,
971971
CapabilityVectorComputeINTEL = 5617,
972972
CapabilityVectorAnyINTEL = 5619,
973-
CapabilityOptimizationHintsINTEL = 5629,
974973
CapabilitySubgroupAvcMotionEstimationINTEL = 5696,
975974
CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
976975
CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
@@ -1405,8 +1404,6 @@ enum Op {
14051404
OpAsmTargetINTEL = 5609,
14061405
OpAsmINTEL = 5610,
14071406
OpAsmCallINTEL = 5611,
1408-
OpAssumeTrueINTEL = 5630,
1409-
OpExpectINTEL = 5631,
14101407
OpDecorateString = 5632,
14111408
OpDecorateStringGOOGLE = 5632,
14121409
OpMemberDecorateString = 5633,

llvm-spirv/lib/SPIRV/libSPIRV/spirv_internal.hpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,25 @@ enum InternalLinkageType {
3535
};
3636

3737
enum InternalOp {
38+
IOpAssumeTrueINTEL = 5630,
39+
IOpExpectINTEL = 5631,
3840
IOpPrev = OpMax - 2,
3941
IOpForward
4042
};
4143

44+
enum InternalCapability {
45+
ICapOptimizationHintsINTEL = 5629
46+
};
47+
4248
constexpr LinkageType LinkageTypeInternal =
4349
static_cast<LinkageType>(ILTInternal);
4450

4551
constexpr Op OpForward = static_cast<Op>(IOpForward);
52+
constexpr Op OpAssumeTrueINTEL = static_cast<Op>(IOpAssumeTrueINTEL);
53+
constexpr Op OpExpectINTEL = static_cast<Op>(IOpExpectINTEL);
54+
55+
constexpr Capability CapabilityOptimizationHintsINTEL =
56+
static_cast<Capability>(ICapOptimizationHintsINTEL);
4657

4758
} // namespace internal
4859
} // namespace spv

0 commit comments

Comments
 (0)