|
| 1 | +; RUN: split-file %s %t |
| 2 | + |
| 3 | +; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %t/bf16_result_operand.ll -o /dev/null 2>&1 | FileCheck %s --check-prefix=RESULT-OPERAND-ERROR |
| 4 | +; RESULT-OPERAND-ERROR: error: <unknown>:0:0: in function test_fabs bfloat (bfloat): OpenCL Extended instructions with bfloat16 require the |
| 5 | +; RESULT-OPERAND-ERROR-SAME: following SPIR-V extension: SPV_INTEL_bfloat16_arithmetic |
| 6 | + |
| 7 | +; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %t/bf16_result.ll -o /dev/null 2>&1 | FileCheck %s --check-prefix=RESULT-ERROR |
| 8 | +; RESULT-ERROR: error: <unknown>:0:0: in function test_nan bfloat (i16): OpenCL Extended instructions with bfloat16 require the |
| 9 | +; RESULT-ERROR-SAME: following SPIR-V extension: SPV_INTEL_bfloat16_arithmetic |
| 10 | + |
| 11 | +; RUN: not llc -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_KHR_bfloat16 %t/bf16_operand.ll -o /dev/null 2>&1 | FileCheck %s --check-prefix=OPERAND-ERROR |
| 12 | +; OPERAND-ERROR: error: <unknown>:0:0: in function test_ilogb i32 (bfloat): OpenCL Extended instructions with bfloat16 require the |
| 13 | +; OPERAND-ERROR-SAME: following SPIR-V extension: SPV_INTEL_bfloat16_arithmetic |
| 14 | + |
| 15 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_result_operand.ll -o - | FileCheck %s --check-prefixes=COMMON,BF16_RESULT_OPERAND |
| 16 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_result.ll -o - | FileCheck %s --check-prefixes=COMMON,BF16_RESULT |
| 17 | +; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_operand.ll -o - | FileCheck %s --check-prefixes=COMMON,BF16_OPERAND |
| 18 | + |
| 19 | +; TODO: re-enable spirv-val once it can verify SPV_INTEL_bfloat16_arithmetic with bfloat16 type on ExtInst |
| 20 | +; RUNx: %if spirv-tools %{ llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_result_operand.ll -o - -filetype=obj | spirv-val %} |
| 21 | +; RUNx: %if spirv-tools %{ llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_result.ll -o - -filetype=obj | spirv-val %} |
| 22 | +; RUNx: %if spirv-tools %{ llc -verify-machineinstrs -O0 -mtriple=spirv64-unknown-unknown --spirv-ext=+SPV_INTEL_bfloat16_arithmetic,+SPV_KHR_bfloat16 %t/bf16_operand.ll -o - -filetype=obj | spirv-val %} |
| 23 | + |
| 24 | +; COMMON-DAG: OpCapability BFloat16ArithmeticINTEL |
| 25 | +; COMMON-DAG: OpCapability BFloat16TypeKHR |
| 26 | +; COMMON-DAG: OpExtension "SPV_KHR_bfloat16" |
| 27 | +; COMMON-DAG: OpExtension "SPV_INTEL_bfloat16_arithmetic" |
| 28 | +; COMMON-DAG: [[EXTSET:%.*]] = OpExtInstImport "OpenCL.std" |
| 29 | +; COMMON-DAG: [[BFLOAT:%.*]] = OpTypeFloat 16 0 |
| 30 | +; COMMON-DAG: [[BFLOATV:%.*]] = OpTypeVector [[BFLOAT]] 4 |
| 31 | + |
| 32 | +; BF16_RESULT_OPERAND: [[OP:%.*]] = OpFunctionParameter [[BFLOAT]] |
| 33 | +; BF16_RESULT_OPERAND: OpExtInst [[BFLOAT]] [[EXTSET]] fabs [[OP]] |
| 34 | +; BF16_RESULT_OPERAND: [[OPV:%.*]] = OpFunctionParameter [[BFLOATV]] |
| 35 | +; BF16_RESULT_OPERAND: OpExtInst [[BFLOATV]] [[EXTSET]] fabs [[OPV]] |
| 36 | + |
| 37 | +; BF16_RESULT-DAG: [[INT:%.*]] = OpTypeInt 16 0 |
| 38 | +; BF16_RESULT-DAG: [[INTV:%.*]] = OpTypeVector [[INT]] 4 |
| 39 | +; BF16_RESULT: [[OP:%.*]] = OpFunctionParameter [[INT]] |
| 40 | +; BF16_RESULT: OpExtInst [[BFLOAT]] [[EXTSET]] nan [[OP]] |
| 41 | +; BF16_RESULT: [[OPV:%.*]] = OpFunctionParameter [[INTV]] |
| 42 | +; BF16_RESULT: OpExtInst [[BFLOATV]] [[EXTSET]] nan [[OPV]] |
| 43 | + |
| 44 | +; BF16_OPERAND-DAG: [[INT:%.*]] = OpTypeInt 32 0 |
| 45 | +; BF16_OPERAND-DAG: [[INTV:%.*]] = OpTypeVector [[INT]] 4 |
| 46 | +; BF16_OPERAND: [[OP:%.*]] = OpFunctionParameter [[BFLOAT]] |
| 47 | +; BF16_OPERAND: OpExtInst [[INT]] [[EXTSET]] ilogb [[OP]] |
| 48 | +; BF16_OPERAND: [[OPV:%.*]] = OpFunctionParameter [[BFLOATV]] |
| 49 | +; BF16_OPERAND: OpExtInst [[INTV]] [[EXTSET]] ilogb [[OPV]] |
| 50 | + |
| 51 | +;--- bf16_result_operand.ll |
| 52 | +define spir_func bfloat @test_fabs(bfloat %x) { |
| 53 | + %r = call bfloat @llvm.fabs.bf16(bfloat %x) |
| 54 | + ret bfloat %r |
| 55 | +} |
| 56 | + |
| 57 | +define spir_func <4 x bfloat> @test_fabsv(<4 x bfloat> %x) { |
| 58 | + %r = call <4 x bfloat> @llvm.fabs.v4bf16(<4 x bfloat> %x) |
| 59 | + ret <4 x bfloat> %r |
| 60 | +} |
| 61 | + |
| 62 | +declare bfloat @llvm.fabs.bf16(bfloat) |
| 63 | +declare <4 x bfloat> @llvm.fabs.v4bf16(<4 x bfloat>) |
| 64 | + |
| 65 | +;--- bf16_result.ll |
| 66 | +define spir_func bfloat @test_nan(i16 %x) { |
| 67 | + %r = call bfloat @_Z3nant(i16 %x) |
| 68 | + ret bfloat %r |
| 69 | +} |
| 70 | + |
| 71 | +define spir_func <4 x bfloat> @test_nanv(<4 x i16> %x) { |
| 72 | + %r = call <4 x bfloat> @_Z3nanDv4_t(<4 x i16> %x) |
| 73 | + ret <4 x bfloat> %r |
| 74 | +} |
| 75 | + |
| 76 | +declare bfloat @_Z3nant(i16) |
| 77 | +declare <4 x bfloat> @_Z3nanDv4_t(<4 x i16>) |
| 78 | + |
| 79 | +;--- bf16_operand.ll |
| 80 | +define spir_func i32 @test_ilogb(bfloat %x) { |
| 81 | + %r = call i32 @_Z5ilogbDF16_(bfloat %x) |
| 82 | + ret i32 %r |
| 83 | +} |
| 84 | + |
| 85 | +define spir_func <4 x i32> @test_ilogbv(<4 x bfloat> %x) { |
| 86 | + %r = call <4 x i32> @_Z5ilogbDv4_DF16_(<4 x bfloat> %x) |
| 87 | + ret <4 x i32> %r |
| 88 | +} |
| 89 | + |
| 90 | +declare i32 @_Z5ilogbDF16_(bfloat) |
| 91 | +declare <4 x i32> @_Z5ilogbDv4_DF16_(<4 x bfloat>) |
0 commit comments