|
| 1 | +;=========================== begin_copyright_notice ============================ |
| 2 | +; |
| 3 | +; Copyright (C) 2024 Intel Corporation |
| 4 | +; |
| 5 | +; SPDX-License-Identifier: MIT |
| 6 | +; |
| 7 | +;============================ end_copyright_notice ============================= |
| 8 | +; |
| 9 | +; RUN: %opt %use_old_pass_manager% -GenXTranslateSPIRVBuiltins \ |
| 10 | +; RUN: -vc-spirv-builtins-bif-path=%VC_SPIRV_OCL_BIF% -march=genx64 \ |
| 11 | +; RUN: -mtriple=spir64-unknown-unknown -mcpu=XeHPC -S < %s | FileCheck %s |
| 12 | +; ------------------------------------------------ |
| 13 | +; GenXTranslateSPIRVBuiltins |
| 14 | +; ------------------------------------------------ |
| 15 | + |
| 16 | +declare spir_func float @_Z11__spirv_DotDv16_fS_(<16 x float>, <16 x float>) |
| 17 | +declare spir_func float @_Z11__spirv_DotDv15_fS_(<15 x float>, <15 x float>) |
| 18 | +declare spir_func double @_Z11__spirv_DotDv4_fS_(<4 x double>, <4 x double>) |
| 19 | +declare spir_func bfloat @_Z11__spirv_DotDv7_fS_(<7 x bfloat>, <7 x bfloat>) |
| 20 | + |
| 21 | +; CHECK-LABEL: spir_func float @dotFloatConst |
| 22 | +define spir_func float @dotFloatConst() { |
| 23 | +; CHECK: [[FMUL:%[^ ]*]] = fmul <16 x float> |
| 24 | +; CHECK: [[RES:%[^ ]*]] = call reassoc float @llvm.vector.reduce.fadd.v16f32(float 0.000000e+00, <16 x float> [[FMUL]]) |
| 25 | +; CHECK: ret float [[RES]] |
| 26 | + %alloc = alloca <16 x float>, align 64 |
| 27 | + %src1 = load <16 x float>, <16 x float>* %alloc, align 64 |
| 28 | + %dot = call spir_func float @_Z11__spirv_DotDv16_fS_(<16 x float> %src1, <16 x float> <float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00, float 1.000000e+00>) |
| 29 | + ret float %dot |
| 30 | +} |
| 31 | + |
| 32 | +; CHECK-LABEL: spir_func float @dotFloatVal |
| 33 | +define spir_func float @dotFloatVal() { |
| 34 | +; CHECK: [[FMUL:%[^ ]*]] = fmul <15 x float> |
| 35 | +; CHECK: [[RES:%[^ ]*]] = call reassoc float @llvm.vector.reduce.fadd.v15f32(float 0.000000e+00, <15 x float> [[FMUL]]) |
| 36 | +; CHECK: ret float [[RES]] |
| 37 | + %alloc = alloca <15 x float>, align 64 |
| 38 | + %src1 = load <15 x float>, <15 x float>* %alloc, align 64 |
| 39 | + %src2 = load <15 x float>, <15 x float>* %alloc, align 64 |
| 40 | + %dot = call spir_func float @_Z11__spirv_DotDv15_fS_(<15 x float> %src1, <15 x float> %src2) |
| 41 | + ret float %dot |
| 42 | +} |
| 43 | + |
| 44 | +; CHECK-LABEL: spir_func double @dotDoubleVal |
| 45 | +define spir_func double @dotDoubleVal() { |
| 46 | +; CHECK: [[FMUL:%[^ ]*]] = fmul <4 x double> {{.*}} |
| 47 | +; CHECK: [[RES:%[^ ]*]] = call reassoc double @llvm.vector.reduce.fadd.v4f64(double 0.000000e+00, <4 x double> [[FMUL]]) |
| 48 | +; CHECK: ret double [[RES]] |
| 49 | + %alloc = alloca <4 x double>, align 128 |
| 50 | + %src1 = load <4 x double>, <4 x double>* %alloc, align 128 |
| 51 | + %src2 = load <4 x double>, <4 x double>* %alloc, align 128 |
| 52 | + %dot = call spir_func double @_Z11__spirv_DotDv4_fS_(<4 x double> %src1, <4 x double> %src2) |
| 53 | + ret double %dot |
| 54 | +} |
| 55 | + |
| 56 | +; CHECK-LABEL: spir_func bfloat @dotBFloatVal |
| 57 | +define spir_func bfloat @dotBFloatVal() { |
| 58 | +; CHECK: [[FMUL:%[^ ]*]] = fmul <7 x bfloat> {{.*}} |
| 59 | +; CHECK: [[RES:%[^ ]*]] = call reassoc bfloat @llvm.vector.reduce.fadd.v7bf16(bfloat 0xR0000, <7 x bfloat> [[FMUL]]) |
| 60 | +; CHECK: ret bfloat [[RES]] |
| 61 | + %alloc = alloca <7 x bfloat>, align 128 |
| 62 | + %src1 = load <7 x bfloat>, <7 x bfloat>* %alloc, align 32 |
| 63 | + %src2 = load <7 x bfloat>, <7 x bfloat>* %alloc, align 32 |
| 64 | + %dot = call spir_func bfloat @_Z11__spirv_DotDv7_fS_(<7 x bfloat> %src1, <7 x bfloat> %src2) |
| 65 | + ret bfloat %dot |
| 66 | +} |
0 commit comments