brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.7 KiB · 8833d3b Raw
212 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2 3; CHECK-DAG: OpName [[TRUNC32_16:%.*]] "f32tof16"4; CHECK-DAG: OpName [[EXT16_32:%.*]] "f16tof32"5 6; CHECK-DAG: OpName [[TRUNC32_16v3:%.*]] "f32tof16v3"7; CHECK-DAG: OpName [[EXT16_32v3:%.*]] "f16tof32v3"8 9; CHECK-DAG: OpName [[F32toS32:%.*]] "f32tos32"10; CHECK-DAG: OpName [[F32toS16:%.*]] "f32tos16"11; CHECK-DAG: OpName [[F32toS8:%.*]] "f32tos8"12; CHECK-DAG: OpName [[F16toS32:%.*]] "f16tos32"13; CHECK-DAG: OpName [[F16toS16:%.*]] "f16tos16"14; CHECK-DAG: OpName [[F16toS8:%.*]] "f16tos8"15 16; CHECK-DAG: OpName [[F32toU32v2:%.*]] "f32tou32v2"17; CHECK-DAG: OpName [[F32toU16v2:%.*]] "f32tou16v2"18; CHECK-DAG: OpName [[F32toU8v2:%.*]] "f32tou8v2"19; CHECK-DAG: OpName [[F16toU32v2:%.*]] "f16tou32v2"20; CHECK-DAG: OpName [[F16toU16v2:%.*]] "f16tou16v2"21; CHECK-DAG: OpName [[F16toU8v2:%.*]] "f16tou8v2"22 23; CHECK-DAG: [[F32:%.*]] = OpTypeFloat 3224; CHECK-DAG: [[F16:%.*]] = OpTypeFloat 1625; CHECK-DAG: [[F32v2:%.*]] = OpTypeVector [[F32]] 226; CHECK-DAG: [[F16v2:%.*]] = OpTypeVector [[F16]] 227; CHECK-DAG: [[F32v3:%.*]] = OpTypeVector [[F32]] 328; CHECK-DAG: [[F16v3:%.*]] = OpTypeVector [[F16]] 329; CHECK-DAG: [[U32:%.*]] = OpTypeInt 32 030; CHECK-DAG: [[U16:%.*]] = OpTypeInt 16 031; CHECK-DAG: [[U8:%.*]] = OpTypeInt 8 032; CHECK-DAG: [[U32v2:%.*]] = OpTypeVector [[U32]] 233; CHECK-DAG: [[U16v2:%.*]] = OpTypeVector [[U16]] 234; CHECK-DAG: [[U8v2:%.*]] = OpTypeVector [[U8]] 235 36 37; CHECK:      [[TRUNC32_16]] = OpFunction [[F16]]38; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32]]39; CHECK:      OpLabel40; CHECK:      [[R:%.*]] = OpFConvert [[F16]] [[A]]41; CHECK:      OpReturnValue [[R]]42; CHECK-NEXT: OpFunctionEnd43define half @f32tof16(float %a) {44    %r = fptrunc float %a to half45    ret half %r46}47 48; CHECK:      [[EXT16_32]] = OpFunction [[F32]]49; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16]]50; CHECK:      OpLabel51; CHECK:      [[R:%.*]] = OpFConvert [[F32]] [[A]]52; CHECK:      OpReturnValue [[R]]53; CHECK-NEXT: OpFunctionEnd54define float @f16tof32(half %a) {55  %r = fpext half %a to float56  ret float %r57}58 59; CHECK:      [[TRUNC32_16v3]] = OpFunction [[F16v3]]60; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32v3]]61; CHECK:      OpLabel62; CHECK:      [[R:%.*]] = OpFConvert [[F16v3]] [[A]]63; CHECK:      OpReturnValue [[R]]64; CHECK-NEXT: OpFunctionEnd65define <3 x half> @f32tof16v3(<3 x float> %a) {66    %r = fptrunc <3 x float> %a to <3 x half>67    ret <3 x half> %r68}69 70; CHECK:      [[EXT16_32v3]] = OpFunction [[F32v3]]71; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16v3]]72; CHECK:      OpLabel73; CHECK:      [[R:%.*]] = OpFConvert [[F32v3]] [[A]]74; CHECK:      OpReturnValue [[R]]75; CHECK-NEXT: OpFunctionEnd76define <3 x float> @f16tof32v3(<3 x half> %a) {77  %r = fpext <3 x half> %a to <3 x float>78  ret <3 x float> %r79}80 81; CHECK:      [[F32toS32]] = OpFunction [[U32]]82; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32]]83; CHECK:      OpLabel84; CHECK:      [[R:%.*]] = OpConvertFToS [[U32]] [[A]]85; CHECK:      OpReturnValue [[R]]86; CHECK-NEXT: OpFunctionEnd87define i32 @f32tos32(float %a) {88  %r = fptosi float %a to i3289  ret i32 %r90}91 92; CHECK:      [[F32toS16]] = OpFunction [[U16]]93; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32]]94; CHECK:      OpLabel95; CHECK:      [[R:%.*]] = OpConvertFToS [[U16]] [[A]]96; CHECK:      OpReturnValue [[R]]97; CHECK-NEXT: OpFunctionEnd98define i16 @f32tos16(float %a) {99  %r = fptosi float %a to i16100  ret i16 %r101}102 103; CHECK:      [[F32toS8]] = OpFunction [[U8]]104; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32]]105; CHECK:      OpLabel106; CHECK:      [[R:%.*]] = OpConvertFToS [[U8]] [[A]]107; CHECK:      OpReturnValue [[R]]108; CHECK-NEXT: OpFunctionEnd109define i8 @f32tos8(float %a) {110  %r = fptosi float %a to i8111  ret i8 %r112}113 114; CHECK:      [[F16toS32]] = OpFunction [[U32]]115; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16]]116; CHECK:      OpLabel117; CHECK:      [[R:%.*]] = OpConvertFToS [[U32]] [[A]]118; CHECK:      OpReturnValue [[R]]119; CHECK-NEXT: OpFunctionEnd120define i32 @f16tos32(half %a) {121  %r = fptosi half %a to i32122  ret i32 %r123}124 125; CHECK:      [[F16toS16]] = OpFunction [[U16]]126; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16]]127; CHECK:      OpLabel128; CHECK:      [[R:%.*]] = OpConvertFToS [[U16]] [[A]]129; CHECK:      OpReturnValue [[R]]130; CHECK-NEXT: OpFunctionEnd131define i16 @f16tos16(half %a) {132  %r = fptosi half %a to i16133  ret i16 %r134}135 136; CHECK:      [[F16toS8]] = OpFunction [[U8]]137; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16]]138; CHECK:      OpLabel139; CHECK:      [[R:%.*]] = OpConvertFToS [[U8]] [[A]]140; CHECK:      OpReturnValue [[R]]141; CHECK-NEXT: OpFunctionEnd142define i8 @f16tos8(half %a) {143  %r = fptosi half %a to i8144  ret i8 %r145}146 147; CHECK:      [[F32toU32v2]] = OpFunction [[U32v2]]148; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32v2]]149; CHECK:      OpLabel150; CHECK:      [[R:%.*]] = OpConvertFToU [[U32v2]] [[A]]151; CHECK:      OpReturnValue [[R]]152; CHECK-NEXT: OpFunctionEnd153define <2 x i32> @f32tou32v2(<2 x float> %a) {154  %r = fptoui <2 x float> %a to <2 x i32>155  ret <2 x i32> %r156}157 158; CHECK:      [[F32toU16v2]] = OpFunction [[U16v2]]159; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32v2]]160; CHECK:      OpLabel161; CHECK:      [[R:%.*]] = OpConvertFToU [[U16v2]] [[A]]162; CHECK:      OpReturnValue [[R]]163; CHECK-NEXT: OpFunctionEnd164define <2 x i16> @f32tou16v2(<2 x float> %a) {165  %r = fptoui <2 x float> %a to <2 x i16>166  ret <2 x i16> %r167}168 169; CHECK:      [[F32toU8v2]] = OpFunction [[U8v2]]170; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F32v2]]171; CHECK:      OpLabel172; CHECK:      [[R:%.*]] = OpConvertFToU [[U8v2]] [[A]]173; CHECK:      OpReturnValue [[R]]174; CHECK-NEXT: OpFunctionEnd175define <2 x i8> @f32tou8v2(<2 x float> %a) {176  %r = fptoui <2 x float> %a to <2 x i8>177  ret <2 x i8> %r178}179 180; CHECK:      [[F16toU32v2]] = OpFunction [[U32v2]]181; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16v2]]182; CHECK:      OpLabel183; CHECK:      [[R:%.*]] = OpConvertFToU [[U32v2]] [[A]]184; CHECK:      OpReturnValue [[R]]185; CHECK-NEXT: OpFunctionEnd186define <2 x i32> @f16tou32v2(<2 x half> %a) {187  %r = fptoui <2 x half> %a to <2 x i32>188  ret <2 x i32> %r189}190 191; CHECK:      [[F16toU16v2]] = OpFunction [[U16v2]]192; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16v2]]193; CHECK:      OpLabel194; CHECK:      [[R:%.*]] = OpConvertFToU [[U16v2]] [[A]]195; CHECK:      OpReturnValue [[R]]196; CHECK-NEXT: OpFunctionEnd197define <2 x i16> @f16tou16v2(<2 x half> %a) {198  %r = fptoui <2 x half> %a to <2 x i16>199  ret <2 x i16> %r200}201 202; CHECK:      [[F16toU8v2]] = OpFunction [[U8v2]]203; CHECK-NEXT: [[A:%.*]] = OpFunctionParameter [[F16v2]]204; CHECK:      OpLabel205; CHECK:      [[R:%.*]] = OpConvertFToU [[U8v2]] [[A]]206; CHECK:      OpReturnValue [[R]]207; CHECK-NEXT: OpFunctionEnd208define <2 x i8> @f16tou8v2(<2 x half> %a) {209  %r = fptoui <2 x half> %a to <2 x i8>210  ret <2 x i8> %r211}212