Skip to content

Commit 0f13ac8

Browse files
[Backport to llvm_release_180] Fix backward translation of OpFmaKHR (#3541)
Backport of PR #3529 into `llvm_release_180`. All commits applied cleanly. Co-authored-by: Viktoria Maximova <[email protected]>
1 parent e5e9379 commit 0f13ac8

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

lib/SPIRV/SPIRVReader.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3036,8 +3036,13 @@ Value *SPIRVToLLVM::transValueWithoutDecoration(SPIRVValue *BV, Function *F,
30363036
BV, Builder.CreateIntrinsic(Intrinsic::arithmetic_fence, RetTy, Val));
30373037
}
30383038
case OpFmaKHR: {
3039+
IRBuilder<> Builder(BB);
30393040
auto *BC = static_cast<SPIRVFmaKHR *>(BV);
3040-
return mapValue(BV, transBuiltinFromInst("fma", BC, BB));
3041+
return mapValue(
3042+
BV, Builder.CreateIntrinsic(Intrinsic::fma, transType(BC->getType()),
3043+
{transValue(BC->getOperand(0), F, BB),
3044+
transValue(BC->getOperand(1), F, BB),
3045+
transValue(BC->getOperand(2), F, BB)}));
30413046
}
30423047
case internal::OpMaskedGatherINTEL: {
30433048
IRBuilder<> Builder(BB);

test/extensions/KHR/SPV_KHR_fma/fma.ll

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV
77
; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o %t.rev.ll
88
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
9+
; RUN: llvm-spirv -r %t.spv --spirv-target-env=SPV-IR -o - | llvm-dis -o %t.rev.ll
10+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
911

1012
; RUN: llvm-spirv %t.bc -spirv-text -o %t.spt
1113
; RUN: FileCheck < %t.spt %s --check-prefix=CHECK-SPIRV-NO-EXT
1214
; RUN: llvm-spirv %t.bc -o %t.spv
1315
; RUN: spirv-val %t.spv
1416
; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o %t.rev.ll
15-
; RUN: FileCheck < %t.rev.ll %s --check-prefix=CHECK-LLVM
17+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=LLVM-NO-EXT
18+
; RUN: llvm-spirv -r %t.spv --spirv-target-env=SPV-IR -o - | llvm-dis -o %t.rev.ll
19+
; RUN: FileCheck < %t.rev.ll %s --check-prefix=LLVM-NO-EXT-SPV-IR
1620

1721
; CHECK-SPIRV: Capability FMAKHR
1822
; CHECK-SPIRV: Extension "SPV_KHR_fma"
@@ -29,9 +33,17 @@
2933
; CHECK-SPIRV-NO-EXT: ExtInst [[#TYPE_FLOAT]] [[#]] [[#]] fma
3034
; CHECK-SPIRV-NO-EXT: ExtInst [[#TYPE_VEC]] [[#]] [[#]] fma
3135

32-
; CHECK-LLVM: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
33-
; CHECK-LLVM: %{{.*}} = call spir_func <4 x float> @_Z3fmaDv4_fS_S_(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
34-
; CHECK-LLVM: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
36+
; CHECK-LLVM: %{{.*}} = call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})
37+
; CHECK-LLVM: %{{.*}} = call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
38+
; CHECK-LLVM: %{{.*}} = call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})
39+
40+
; LLVM-NO-EXT: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
41+
; LLVM-NO-EXT: %{{.*}} = call spir_func <4 x float> @_Z3fmaDv4_fS_S_(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
42+
; LLVM-NO-EXT: %{{.*}} = call spir_func float @_Z3fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
43+
44+
; LLVM-NO-EXT-SPV-IR: %{{.*}} = call spir_func float @_Z15__spirv_ocl_fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
45+
; LLVM-NO-EXT-SPV-IR: %{{.*}} = call spir_func <4 x float> @_Z15__spirv_ocl_fmaDv4_fS_S_(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})
46+
; LLVM-NO-EXT-SPV-IR: %{{.*}} = call spir_func float @_Z15__spirv_ocl_fmafff(float %{{.*}}, float %{{.*}}, float %{{.*}})
3547

3648
target datalayout = "e-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024"
3749
target triple = "spir64-unknown-unknown"

0 commit comments

Comments
 (0)