108 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s2 3; CHECK-DAG: OpName [[VECTOR_FNEG:%.+]] "vector_fneg"4; CHECK-DAG: OpName [[VECTOR_FADD:%.+]] "vector_fadd"5; CHECK-DAG: OpName [[VECTOR_FSUB:%.+]] "vector_fsub"6; CHECK-DAG: OpName [[VECTOR_FMUL:%.+]] "vector_fmul"7; CHECK-DAG: OpName [[VECTOR_FDIV:%.+]] "vector_fdiv"8; CHECK-DAG: OpName [[VECTOR_FREM:%.+]] "vector_frem"9;; TODO: add test for OpFMod10 11; CHECK-NOT: DAG-FENCE12 13; CHECK-DAG: [[FP16:%.+]] = OpTypeFloat 1614; CHECK-DAG: [[VECTOR:%.+]] = OpTypeVector [[FP16]]15; CHECK-DAG: [[VECTOR_FN:%.+]] = OpTypeFunction [[VECTOR]] [[VECTOR]] [[VECTOR]]16 17; CHECK-NOT: DAG-FENCE18 19 20;; Test fneg on vector:21define <2 x half> @vector_fneg(<2 x half> %a, <2 x half> %unused) {22 %c = fneg <2 x half> %a23 ret <2 x half> %c24}25 26; CHECK: [[VECTOR_FNEG]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]27; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]28; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]29; CHECK: OpLabel30; CHECK: [[C:%.+]] = OpFNegate [[VECTOR]] [[A]]31; CHECK: OpReturnValue [[C]]32; CHECK-NEXT: OpFunctionEnd33 34 35;; Test fadd on vector:36define <2 x half> @vector_fadd(<2 x half> %a, <2 x half> %b) {37 %c = fadd <2 x half> %a, %b38 ret <2 x half> %c39}40 41; CHECK: [[VECTOR_FADD]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]42; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]43; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]44; CHECK: OpLabel45; CHECK: [[C:%.+]] = OpFAdd [[VECTOR]] [[A]] [[B]]46; CHECK: OpReturnValue [[C]]47; CHECK-NEXT: OpFunctionEnd48 49 50;; Test fsub on vector:51define <2 x half> @vector_fsub(<2 x half> %a, <2 x half> %b) {52 %c = fsub <2 x half> %a, %b53 ret <2 x half> %c54}55 56; CHECK: [[VECTOR_FSUB]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]57; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]58; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]59; CHECK: OpLabel60; CHECK: [[C:%.+]] = OpFSub [[VECTOR]] [[A]] [[B]]61; CHECK: OpReturnValue [[C]]62; CHECK-NEXT: OpFunctionEnd63 64 65;; Test fmul on vector:66define <2 x half> @vector_fmul(<2 x half> %a, <2 x half> %b) {67 %c = fmul <2 x half> %a, %b68 ret <2 x half> %c69}70 71; CHECK: [[VECTOR_FMUL]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]72; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]73; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]74; CHECK: OpLabel75; CHECK: [[C:%.+]] = OpFMul [[VECTOR]] [[A]] [[B]]76; CHECK: OpReturnValue [[C]]77; CHECK-NEXT: OpFunctionEnd78 79 80;; Test fdiv on vector:81define <2 x half> @vector_fdiv(<2 x half> %a, <2 x half> %b) {82 %c = fdiv <2 x half> %a, %b83 ret <2 x half> %c84}85 86; CHECK: [[VECTOR_FDIV]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]87; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]88; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]89; CHECK: OpLabel90; CHECK: [[C:%.+]] = OpFDiv [[VECTOR]] [[A]] [[B]]91; CHECK: OpReturnValue [[C]]92; CHECK-NEXT: OpFunctionEnd93 94 95;; Test frem on vector:96define <2 x half> @vector_frem(<2 x half> %a, <2 x half> %b) {97 %c = frem <2 x half> %a, %b98 ret <2 x half> %c99}100 101; CHECK: [[VECTOR_FREM]] = OpFunction [[VECTOR]] None [[VECTOR_FN]]102; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[VECTOR]]103; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[VECTOR]]104; CHECK: OpLabel105; CHECK: [[C:%.+]] = OpFRem [[VECTOR]] [[A]] [[B]]106; CHECK: OpReturnValue [[C]]107; CHECK-NEXT: OpFunctionEnd108