1; RUN: llvm-as %s -o %t.bc 2; RUN: llvm-spirv -spirv-text %t.bc -o - | FileCheck %s --check-prefix=CHECK-SPIRV-OFF 3; RUN: llvm-spirv --spirv-ext=+SPV_INTEL_fp_fast_math_mode -spirv-text %t.bc -o - | FileCheck %s --check-prefix=CHECK-SPIRV-ON 4; RUN: llvm-spirv --spirv-ext=+SPV_INTEL_fp_fast_math_mode %t.bc -o %t.spv 5; RUN: llvm-spirv -r %t.spv -o - | llvm-dis -o - | FileCheck %s --check-prefix=CHECK-LLVM 6 7; CHECK-SPIRV-ON: 2 Capability FPFastMathModeINTEL 8; CHECK-SPIRV-ON: 3 Name [[mu:[0-9]+]] "mul" 9; CHECK-SPIRV-ON: 3 Name [[su:[0-9]+]] "sub" 10; CHECK-SPIRV-ON: 4 Decorate [[mu]] FPFastMathMode 65536 11; CHECK-SPIRV-ON: 4 Decorate [[su]] FPFastMathMode 131072 12 13; CHECK-SPIRV-OFF-NOT: 2 Capability FPFastMathModeINTEL 14; CHECK-SPIRV-OFF: 3 Name [[mu:[0-9]+]] "mul" 15; CHECK-SPIRV-OFF: 3 Name [[su:[0-9]+]] "sub" 16; CHECK-SPIRV-OFF-NOT: 4 Decorate [[mu]] FPFastMathMode 65536 17; CHECK-SPIRV-OFF-NOT: 4 Decorate [[su]] FPFastMathMode 131072 18 19; CHECK-LLVM: %mul = fmul contract float %0, %1 20; CHECK-LLVM: %sub = fsub reassoc float %2, %3 21 22target datalayout = "e-p:32:32-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-n8:16:32:64" 23target triple = "spir" 24 25; Function Attrs: convergent noinline norecurse nounwind optnone 26define spir_kernel void @test(float %a, float %b) #0 !kernel_arg_addr_space !3 !kernel_arg_access_qual !4 !kernel_arg_type !5 !kernel_arg_base_type !5 !kernel_arg_type_qual !6 { 27entry: 28 %a.addr = alloca float, align 4 29 %b.addr = alloca float, align 4 30 store float %a, float* %a.addr, align 4 31 store float %b, float* %b.addr, align 4 32 %0 = load float, float* %a.addr, align 4 33 %1 = load float, float* %a.addr, align 4 34 %mul = fmul contract float %0, %1 35 store float %mul, float* %b.addr, align 4 36 %2 = load float, float* %b.addr, align 4 37 %3 = load float, float* %b.addr, align 4 38 %sub = fsub reassoc float %2, %3 39 store float %sub, float* %b.addr, align 4 40 ret void 41} 42 43attributes #0 = { convergent noinline norecurse nounwind optnone "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "uniform-work-group-size"="false" "unsafe-fp-math"="false" "use-soft-float"="false" } 44 45!llvm.module.flags = !{!0} 46!opencl.ocl.version = !{!1} 47!opencl.spir.version = !{!1} 48!llvm.ident = !{!2} 49 50!0 = !{i32 1, !"wchar_size", i32 4} 51!1 = !{i32 2, i32 0} 52!2 = !{!"clang version 12.0.0 (https://github.com/intel/llvm.git 5cf8088c994778561c8584d5433d7d32618725b2)"} 53!3 = !{i32 0, i32 0} 54!4 = !{!"none", !"none"} 55!5 = !{!"float", !"float"} 56!6 = !{!"", !""} 57