1*9880d681SAndroid Build Coastguard Worker; Test vector division. There is no native integer support for this, 2*9880d681SAndroid Build Coastguard Worker; so the integer cases are really a test of the operation legalization code. 3*9880d681SAndroid Build Coastguard Worker; 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker; Test a v16i8 division. 7*9880d681SAndroid Build Coastguard Workerdefine <16 x i8> @f1(<16 x i8> %dummy, <16 x i8> %val1, <16 x i8> %val2) { 8*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 9*9880d681SAndroid Build Coastguard Worker; CHECK: vlvgp [[REG:%v[0-9]+]], 10*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 0 11*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 1 12*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 2 13*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 3 14*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 4 15*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 5 16*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 6 17*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 8 18*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 9 19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 10 20*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 11 21*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 12 22*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 13 23*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgb [[REG]], {{%r[0-5]}}, 14 24*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 25*9880d681SAndroid Build Coastguard Worker %ret = sdiv <16 x i8> %val1, %val2 26*9880d681SAndroid Build Coastguard Worker ret <16 x i8> %ret 27*9880d681SAndroid Build Coastguard Worker} 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Worker; Test a v8i16 division. 30*9880d681SAndroid Build Coastguard Workerdefine <8 x i16> @f2(<8 x i16> %dummy, <8 x i16> %val1, <8 x i16> %val2) { 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 32*9880d681SAndroid Build Coastguard Worker; CHECK: vlvgp [[REG:%v[0-9]+]], 33*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 0 34*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 1 35*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 2 36*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 4 37*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 5 38*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgh [[REG]], {{%r[0-5]}}, 6 39*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 40*9880d681SAndroid Build Coastguard Worker %ret = sdiv <8 x i16> %val1, %val2 41*9880d681SAndroid Build Coastguard Worker ret <8 x i16> %ret 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; Test a v4i32 division. 45*9880d681SAndroid Build Coastguard Workerdefine <4 x i32> @f3(<4 x i32> %dummy, <4 x i32> %val1, <4 x i32> %val2) { 46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 47*9880d681SAndroid Build Coastguard Worker; CHECK: vlvgp [[REG:%v[0-9]+]], 48*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgf [[REG]], {{%r[0-5]}}, 0 49*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vlvgf [[REG]], {{%r[0-5]}}, 2 50*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 51*9880d681SAndroid Build Coastguard Worker %ret = sdiv <4 x i32> %val1, %val2 52*9880d681SAndroid Build Coastguard Worker ret <4 x i32> %ret 53*9880d681SAndroid Build Coastguard Worker} 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker; Test a v2i64 division. 56*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f4(<2 x i64> %dummy, <2 x i64> %val1, <2 x i64> %val2) { 57*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 58*9880d681SAndroid Build Coastguard Worker; CHECK: vlvgp %v24, 59*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 60*9880d681SAndroid Build Coastguard Worker %ret = sdiv <2 x i64> %val1, %val2 61*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; Test a v2f64 division. 65*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f5(<2 x double> %dummy, <2 x double> %val1, 66*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 68*9880d681SAndroid Build Coastguard Worker; CHECK: vfddb %v24, %v26, %v28 69*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 70*9880d681SAndroid Build Coastguard Worker %ret = fdiv <2 x double> %val1, %val2 71*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Worker; Test an f64 division that uses vector registers. 75*9880d681SAndroid Build Coastguard Workerdefine double @f6(<2 x double> %val1, <2 x double> %val2) { 76*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 77*9880d681SAndroid Build Coastguard Worker; CHECK: wfddb %f0, %v24, %v26 78*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 79*9880d681SAndroid Build Coastguard Worker %scalar1 = extractelement <2 x double> %val1, i32 0 80*9880d681SAndroid Build Coastguard Worker %scalar2 = extractelement <2 x double> %val2, i32 0 81*9880d681SAndroid Build Coastguard Worker %ret = fdiv double %scalar1, %scalar2 82*9880d681SAndroid Build Coastguard Worker ret double %ret 83*9880d681SAndroid Build Coastguard Worker} 84