1; RUN: llc -O0 -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s 2 3; CHECK-DAG: OpName [[SCALAR_ADD:%.+]] "scalar_add" 4; CHECK-DAG: OpName [[SCALAR_SUB:%.+]] "scalar_sub" 5; CHECK-DAG: OpName [[SCALAR_MUL:%.+]] "scalar_mul" 6; CHECK-DAG: OpName [[SCALAR_UDIV:%.+]] "scalar_udiv" 7; CHECK-DAG: OpName [[SCALAR_SDIV:%.+]] "scalar_sdiv" 8; TODO: add tests for urem + srem 9; TODO: add test for OpSNegate 10 11; CHECK-NOT: DAG-FENCE 12 13; CHECK-DAG: [[SCALAR:%.+]] = OpTypeInt 32 14; CHECK-DAG: [[SCALAR_FN:%.+]] = OpTypeFunction [[SCALAR]] [[SCALAR]] [[SCALAR]] 15 16; CHECK-NOT: DAG-FENCE 17 18 19; Test add on scalar: 20define i32 @scalar_add(i32 %a, i32 %b) { 21 %c = add i32 %a, %b 22 ret i32 %c 23} 24 25; CHECK: [[SCALAR_ADD]] = OpFunction [[SCALAR]] None [[SCALAR_FN]] 26; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]] 27; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]] 28; CHECK: OpLabel 29; CHECK: [[C:%.+]] = OpIAdd [[SCALAR]] [[A]] [[B]] 30; CHECK: OpReturnValue [[C]] 31; CHECK-NEXT: OpFunctionEnd 32 33 34; Test sub on scalar: 35define i32 @scalar_sub(i32 %a, i32 %b) { 36 %c = sub i32 %a, %b 37 ret i32 %c 38} 39 40; CHECK: [[SCALAR_SUB]] = OpFunction [[SCALAR]] None [[SCALAR_FN]] 41; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]] 42; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]] 43; CHECK: OpLabel 44; CHECK: [[C:%.+]] = OpISub [[SCALAR]] [[A]] [[B]] 45; CHECK: OpReturnValue [[C]] 46; CHECK-NEXT: OpFunctionEnd 47 48 49; Test mul on scalar: 50define i32 @scalar_mul(i32 %a, i32 %b) { 51 %c = mul i32 %a, %b 52 ret i32 %c 53} 54 55; CHECK: [[SCALAR_MUL]] = OpFunction [[SCALAR]] None [[SCALAR_FN]] 56; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]] 57; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]] 58; CHECK: OpLabel 59; CHECK: [[C:%.+]] = OpIMul [[SCALAR]] [[A]] [[B]] 60; CHECK: OpReturnValue [[C]] 61; CHECK-NEXT: OpFunctionEnd 62 63 64; Test udiv on scalar: 65define i32 @scalar_udiv(i32 %a, i32 %b) { 66 %c = udiv i32 %a, %b 67 ret i32 %c 68} 69 70; CHECK: [[SCALAR_UDIV]] = OpFunction [[SCALAR]] None [[SCALAR_FN]] 71; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]] 72; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]] 73; CHECK: OpLabel 74; CHECK: [[C:%.+]] = OpUDiv [[SCALAR]] [[A]] [[B]] 75; CHECK: OpReturnValue [[C]] 76; CHECK-NEXT: OpFunctionEnd 77 78 79; Test sdiv on scalar: 80define i32 @scalar_sdiv(i32 %a, i32 %b) { 81 %c = sdiv i32 %a, %b 82 ret i32 %c 83} 84 85; CHECK: [[SCALAR_SDIV]] = OpFunction [[SCALAR]] None [[SCALAR_FN]] 86; CHECK-NEXT: [[A:%.+]] = OpFunctionParameter [[SCALAR]] 87; CHECK-NEXT: [[B:%.+]] = OpFunctionParameter [[SCALAR]] 88; CHECK: OpLabel 89; CHECK: [[C:%.+]] = OpSDiv [[SCALAR]] [[A]] [[B]] 90; CHECK: OpReturnValue [[C]] 91; CHECK-NEXT: OpFunctionEnd 92