; REQUIRES: spirv-as
; RUN: spirv-as --target-env spv1.0 -o %t.spv %s
; RUN: spirv-val %t.spv
; RUN: llvm-spirv -r -o - %t.spv | llvm-dis | FileCheck %s
               OpCapability Addresses
               OpCapability Kernel
               OpMemoryModel Physical32 OpenCL
               OpEntryPoint Kernel %1 "testNullConstants"
       %void = OpTypeVoid
       %bool = OpTypeBool
       %uint = OpTypeInt 32 0
      %float = OpTypeFloat 32
     %boolv3 = OpTypeVector %bool 3
     %uintv3 = OpTypeVector %uint 3
    %floatv3 = OpTypeVector %float 3
          %5 = OpTypeFunction %void %bool %boolv3 %uint %uintv3 %float %floatv3
      %bool0 = OpConstantNull %bool
    %boolv30 = OpConstantNull %boolv3
      %uint0 = OpConstantNull %uint
    %uintv30 = OpConstantNull %uintv3
     %float0 = OpConstantNull %float
   %floatv30 = OpConstantNull %floatv3

          %1 = OpFunction %void None %5
         %pb = OpFunctionParameter %bool
       %pbv3 = OpFunctionParameter %boolv3
         %pu = OpFunctionParameter %uint
       %puv3 = OpFunctionParameter %uintv3
         %pf = OpFunctionParameter %float
       %pfv3 = OpFunctionParameter %floatv3
      %entry = OpLabel
         %tb = OpLogicalEqual %bool %pb %bool0
       %tbv3 = OpLogicalEqual %boolv3 %pbv3 %boolv30
         %tu = OpIEqual %bool %pu %uint0
       %tuv3 = OpIEqual %boolv3 %puv3 %uintv30
         %tf = OpFOrdEqual %bool %pf %float0
       %tfv3 = OpFOrdEqual %boolv3 %pfv3 %floatv30
               OpReturn
               OpFunctionEnd

; CHECK: icmp eq i1 %[[#]], false
; CHECK: icmp eq <3 x i1> %[[#]], zeroinitializer
; CHECK: icmp eq i32 %[[#]], 0
; CHECK: icmp eq <3 x i32> %[[#]], zeroinitializer
; CHECK: fcmp oeq float %[[#]], 0.000000e+00
; CHECK: fcmp oeq <3 x float> %[[#]], zeroinitializer
