Skip to content

Commit 7be620b

Browse files
vmaksimojsji
authored andcommitted
Fix llvm.frexp intrinsic translation with SPV_KHR_untyped_pointers (#2818)
Original commit: KhronosGroup/SPIRV-LLVM-Translator@e3b9ba378349313
1 parent 157dae5 commit 7be620b

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

llvm-spirv/lib/SPIRV/SPIRVWriter.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2251,7 +2251,15 @@ LLVMToSPIRVBase::transValueWithoutDecoration(Value *V, SPIRVBasicBlock *BB,
22512251
auto *FrexpResult = transValue(RV, BB);
22522252
SPIRVValue *IntFromFrexpResult =
22532253
static_cast<SPIRVExtInst *>(FrexpResult)->getArgValues()[1];
2254-
IntFromFrexpResult = BM->addLoadInst(IntFromFrexpResult, {}, BB);
2254+
SPIRVType *LoadTy = nullptr;
2255+
2256+
if (IntFromFrexpResult->isUntypedVariable()) {
2257+
auto *BV =
2258+
static_cast<SPIRVUntypedVariableKHR *>(IntFromFrexpResult);
2259+
LoadTy = BV->getDataType();
2260+
}
2261+
IntFromFrexpResult =
2262+
BM->addLoadInst(IntFromFrexpResult, {}, BB, LoadTy);
22552263

22562264
std::vector<SPIRVId> Operands = {FrexpResult->getId(),
22572265
IntFromFrexpResult->getId()};
@@ -2470,7 +2478,13 @@ LLVMToSPIRVBase::transValueWithoutDecoration(Value *V, SPIRVBasicBlock *BB,
24702478
// Idx = 1
24712479
SPIRVValue *IntFromFrexpResult =
24722480
static_cast<SPIRVExtInst *>(Val)->getArgValues()[1];
2473-
IntFromFrexpResult = BM->addLoadInst(IntFromFrexpResult, {}, BB);
2481+
SPIRVType *LoadTy = nullptr;
2482+
if (IntFromFrexpResult->isUntypedVariable()) {
2483+
auto *BV = static_cast<SPIRVUntypedVariableKHR *>(IntFromFrexpResult);
2484+
LoadTy = BV->getDataType();
2485+
}
2486+
IntFromFrexpResult =
2487+
BM->addLoadInst(IntFromFrexpResult, {}, BB, LoadTy);
24742488
return mapValue(V, IntFromFrexpResult);
24752489
}
24762490
}

llvm-spirv/test/llvm-intrinsics/frexp.ll

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
; RUN: llvm-as %s -o %t.bc
22
; RUN: llvm-spirv %t.bc -spirv-text
3-
; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
3+
; RUN: FileCheck < %t.spt %s --check-prefixes=CHECK-SPIRV,CHECK-SPIRV-TYPED-PTR
44
; RUN: llvm-spirv %t.bc -o %t.spv
55
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
66
; RUN: llvm-dis %t.rev.bc
77
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
88

9+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_untyped_pointers -spirv-text -o %t.spt
10+
; RUN: FileCheck < %t.spt %s --check-prefixes=CHECK-SPIRV,CHECK-SPIRV-UNTYPED-PTR
11+
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_KHR_untyped_pointers -o %t.spv
12+
; RUN: llvm-spirv -r %t.spv -o %t.rev.bc
13+
; RUN: llvm-dis %t.rev.bc
14+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
15+
916
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
1017
target triple = "spir64-unknown-unknown"
1118

@@ -14,7 +21,8 @@ target triple = "spir64-unknown-unknown"
1421
; CHECK-SPIRV: TypeInt [[#TypeInt:]] 32
1522
; CHECK-SPIRV: TypeFloat [[#TypeFloat:]] 32
1623
; CHECK-SPIRV: TypeStruct [[#TypeStrFloatInt:]] [[#TypeFloat]] [[#TypeInt]]
17-
; CHECK-SPIRV: TypePointer [[#TypeIntPtr:]] 7 [[#TypeInt]]
24+
; CHECK-SPIRV-TYPED-PTR: TypePointer [[#TypeIntPtr:]] 7 [[#TypeInt]]
25+
; CHECK-SPIRV-UNTYPED-PTR: TypeUntypedPointerKHR [[#TypePtr:]] 7
1826

1927
; CHECK-SPIRV: TypeFloat [[#TypeDouble:]] 64
2028
; CHECK-SPIRV: TypeStruct [[#TypeStrDoubleInt:]] [[#TypeDouble]] [[#TypeInt]]
@@ -49,7 +57,8 @@ declare { <4 x float>, <4 x i32> } @llvm.frexp.v4f32.v4i32(<4 x float>)
4957
declare { <2 x double>, <2 x i32> } @llvm.frexp.v2f64.v2i32(<2 x double>)
5058

5159
; CHECK-SPIRV: Function [[#TypeStrFloatInt:]]
52-
; CHECK-SPIRV: Variable [[#TypeIntPtr]] [[#IntVar:]] 7
60+
; CHECK-SPIRV-TYPED-PTR: Variable [[#TypeIntPtr]] [[#IntVar:]] 7
61+
; CHECK-SPIRV-UNTYPED-PTR: UntypedVariableKHR [[#TypePtr]] [[#IntVar:]] 7 [[#TypeInt]]
5362
; CHECK-SPIRV: ExtInst [[#TypeFloat]] [[#FrexpId:]] [[#ExtInstSetId]] frexp [[#NegatedZeroConst]] [[#IntVar]]
5463
; CHECK-SPIRV: Load [[#]] [[#LoadId:]] [[#]]
5564
; CHECK-SPIRV: CompositeConstruct [[#TypeStrFloatInt]] [[#ComposConstr:]] [[#FrexpId]] [[#LoadId]]

0 commit comments

Comments
 (0)