1*f3aa4416Schenli; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*f3aa4416Schenli; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s 3*f3aa4416Schenli 4*f3aa4416Schenlideclare <16 x i8> @llvm.loongarch.lsx.vmax.b(<16 x i8>, <16 x i8>) 5*f3aa4416Schenli 6*f3aa4416Schenlidefine <16 x i8> @lsx_vmax_b(<16 x i8> %va, <16 x i8> %vb) nounwind { 7*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_b: 8*f3aa4416Schenli; CHECK: # %bb.0: # %entry 9*f3aa4416Schenli; CHECK-NEXT: vmax.b $vr0, $vr0, $vr1 10*f3aa4416Schenli; CHECK-NEXT: ret 11*f3aa4416Schenlientry: 12*f3aa4416Schenli %res = call <16 x i8> @llvm.loongarch.lsx.vmax.b(<16 x i8> %va, <16 x i8> %vb) 13*f3aa4416Schenli ret <16 x i8> %res 14*f3aa4416Schenli} 15*f3aa4416Schenli 16*f3aa4416Schenlideclare <8 x i16> @llvm.loongarch.lsx.vmax.h(<8 x i16>, <8 x i16>) 17*f3aa4416Schenli 18*f3aa4416Schenlidefine <8 x i16> @lsx_vmax_h(<8 x i16> %va, <8 x i16> %vb) nounwind { 19*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_h: 20*f3aa4416Schenli; CHECK: # %bb.0: # %entry 21*f3aa4416Schenli; CHECK-NEXT: vmax.h $vr0, $vr0, $vr1 22*f3aa4416Schenli; CHECK-NEXT: ret 23*f3aa4416Schenlientry: 24*f3aa4416Schenli %res = call <8 x i16> @llvm.loongarch.lsx.vmax.h(<8 x i16> %va, <8 x i16> %vb) 25*f3aa4416Schenli ret <8 x i16> %res 26*f3aa4416Schenli} 27*f3aa4416Schenli 28*f3aa4416Schenlideclare <4 x i32> @llvm.loongarch.lsx.vmax.w(<4 x i32>, <4 x i32>) 29*f3aa4416Schenli 30*f3aa4416Schenlidefine <4 x i32> @lsx_vmax_w(<4 x i32> %va, <4 x i32> %vb) nounwind { 31*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_w: 32*f3aa4416Schenli; CHECK: # %bb.0: # %entry 33*f3aa4416Schenli; CHECK-NEXT: vmax.w $vr0, $vr0, $vr1 34*f3aa4416Schenli; CHECK-NEXT: ret 35*f3aa4416Schenlientry: 36*f3aa4416Schenli %res = call <4 x i32> @llvm.loongarch.lsx.vmax.w(<4 x i32> %va, <4 x i32> %vb) 37*f3aa4416Schenli ret <4 x i32> %res 38*f3aa4416Schenli} 39*f3aa4416Schenli 40*f3aa4416Schenlideclare <2 x i64> @llvm.loongarch.lsx.vmax.d(<2 x i64>, <2 x i64>) 41*f3aa4416Schenli 42*f3aa4416Schenlidefine <2 x i64> @lsx_vmax_d(<2 x i64> %va, <2 x i64> %vb) nounwind { 43*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_d: 44*f3aa4416Schenli; CHECK: # %bb.0: # %entry 45*f3aa4416Schenli; CHECK-NEXT: vmax.d $vr0, $vr0, $vr1 46*f3aa4416Schenli; CHECK-NEXT: ret 47*f3aa4416Schenlientry: 48*f3aa4416Schenli %res = call <2 x i64> @llvm.loongarch.lsx.vmax.d(<2 x i64> %va, <2 x i64> %vb) 49*f3aa4416Schenli ret <2 x i64> %res 50*f3aa4416Schenli} 51*f3aa4416Schenli 52*f3aa4416Schenlideclare <16 x i8> @llvm.loongarch.lsx.vmaxi.b(<16 x i8>, i32) 53*f3aa4416Schenli 54*f3aa4416Schenlidefine <16 x i8> @lsx_vmaxi_b(<16 x i8> %va) nounwind { 55*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_b: 56*f3aa4416Schenli; CHECK: # %bb.0: # %entry 57*f3aa4416Schenli; CHECK-NEXT: vmaxi.b $vr0, $vr0, -16 58*f3aa4416Schenli; CHECK-NEXT: ret 59*f3aa4416Schenlientry: 60*f3aa4416Schenli %res = call <16 x i8> @llvm.loongarch.lsx.vmaxi.b(<16 x i8> %va, i32 -16) 61*f3aa4416Schenli ret <16 x i8> %res 62*f3aa4416Schenli} 63*f3aa4416Schenli 64*f3aa4416Schenlideclare <8 x i16> @llvm.loongarch.lsx.vmaxi.h(<8 x i16>, i32) 65*f3aa4416Schenli 66*f3aa4416Schenlidefine <8 x i16> @lsx_vmaxi_h(<8 x i16> %va) nounwind { 67*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_h: 68*f3aa4416Schenli; CHECK: # %bb.0: # %entry 69*f3aa4416Schenli; CHECK-NEXT: vmaxi.h $vr0, $vr0, -16 70*f3aa4416Schenli; CHECK-NEXT: ret 71*f3aa4416Schenlientry: 72*f3aa4416Schenli %res = call <8 x i16> @llvm.loongarch.lsx.vmaxi.h(<8 x i16> %va, i32 -16) 73*f3aa4416Schenli ret <8 x i16> %res 74*f3aa4416Schenli} 75*f3aa4416Schenli 76*f3aa4416Schenlideclare <4 x i32> @llvm.loongarch.lsx.vmaxi.w(<4 x i32>, i32) 77*f3aa4416Schenli 78*f3aa4416Schenlidefine <4 x i32> @lsx_vmaxi_w(<4 x i32> %va) nounwind { 79*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_w: 80*f3aa4416Schenli; CHECK: # %bb.0: # %entry 81*f3aa4416Schenli; CHECK-NEXT: vmaxi.w $vr0, $vr0, 15 82*f3aa4416Schenli; CHECK-NEXT: ret 83*f3aa4416Schenlientry: 84*f3aa4416Schenli %res = call <4 x i32> @llvm.loongarch.lsx.vmaxi.w(<4 x i32> %va, i32 15) 85*f3aa4416Schenli ret <4 x i32> %res 86*f3aa4416Schenli} 87*f3aa4416Schenli 88*f3aa4416Schenlideclare <2 x i64> @llvm.loongarch.lsx.vmaxi.d(<2 x i64>, i32) 89*f3aa4416Schenli 90*f3aa4416Schenlidefine <2 x i64> @lsx_vmaxi_d(<2 x i64> %va) nounwind { 91*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_d: 92*f3aa4416Schenli; CHECK: # %bb.0: # %entry 93*f3aa4416Schenli; CHECK-NEXT: vmaxi.d $vr0, $vr0, 15 94*f3aa4416Schenli; CHECK-NEXT: ret 95*f3aa4416Schenlientry: 96*f3aa4416Schenli %res = call <2 x i64> @llvm.loongarch.lsx.vmaxi.d(<2 x i64> %va, i32 15) 97*f3aa4416Schenli ret <2 x i64> %res 98*f3aa4416Schenli} 99*f3aa4416Schenli 100*f3aa4416Schenlideclare <16 x i8> @llvm.loongarch.lsx.vmax.bu(<16 x i8>, <16 x i8>) 101*f3aa4416Schenli 102*f3aa4416Schenlidefine <16 x i8> @lsx_vmax_bu(<16 x i8> %va, <16 x i8> %vb) nounwind { 103*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_bu: 104*f3aa4416Schenli; CHECK: # %bb.0: # %entry 105*f3aa4416Schenli; CHECK-NEXT: vmax.bu $vr0, $vr0, $vr1 106*f3aa4416Schenli; CHECK-NEXT: ret 107*f3aa4416Schenlientry: 108*f3aa4416Schenli %res = call <16 x i8> @llvm.loongarch.lsx.vmax.bu(<16 x i8> %va, <16 x i8> %vb) 109*f3aa4416Schenli ret <16 x i8> %res 110*f3aa4416Schenli} 111*f3aa4416Schenli 112*f3aa4416Schenlideclare <8 x i16> @llvm.loongarch.lsx.vmax.hu(<8 x i16>, <8 x i16>) 113*f3aa4416Schenli 114*f3aa4416Schenlidefine <8 x i16> @lsx_vmax_hu(<8 x i16> %va, <8 x i16> %vb) nounwind { 115*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_hu: 116*f3aa4416Schenli; CHECK: # %bb.0: # %entry 117*f3aa4416Schenli; CHECK-NEXT: vmax.hu $vr0, $vr0, $vr1 118*f3aa4416Schenli; CHECK-NEXT: ret 119*f3aa4416Schenlientry: 120*f3aa4416Schenli %res = call <8 x i16> @llvm.loongarch.lsx.vmax.hu(<8 x i16> %va, <8 x i16> %vb) 121*f3aa4416Schenli ret <8 x i16> %res 122*f3aa4416Schenli} 123*f3aa4416Schenli 124*f3aa4416Schenlideclare <4 x i32> @llvm.loongarch.lsx.vmax.wu(<4 x i32>, <4 x i32>) 125*f3aa4416Schenli 126*f3aa4416Schenlidefine <4 x i32> @lsx_vmax_wu(<4 x i32> %va, <4 x i32> %vb) nounwind { 127*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_wu: 128*f3aa4416Schenli; CHECK: # %bb.0: # %entry 129*f3aa4416Schenli; CHECK-NEXT: vmax.wu $vr0, $vr0, $vr1 130*f3aa4416Schenli; CHECK-NEXT: ret 131*f3aa4416Schenlientry: 132*f3aa4416Schenli %res = call <4 x i32> @llvm.loongarch.lsx.vmax.wu(<4 x i32> %va, <4 x i32> %vb) 133*f3aa4416Schenli ret <4 x i32> %res 134*f3aa4416Schenli} 135*f3aa4416Schenli 136*f3aa4416Schenlideclare <2 x i64> @llvm.loongarch.lsx.vmax.du(<2 x i64>, <2 x i64>) 137*f3aa4416Schenli 138*f3aa4416Schenlidefine <2 x i64> @lsx_vmax_du(<2 x i64> %va, <2 x i64> %vb) nounwind { 139*f3aa4416Schenli; CHECK-LABEL: lsx_vmax_du: 140*f3aa4416Schenli; CHECK: # %bb.0: # %entry 141*f3aa4416Schenli; CHECK-NEXT: vmax.du $vr0, $vr0, $vr1 142*f3aa4416Schenli; CHECK-NEXT: ret 143*f3aa4416Schenlientry: 144*f3aa4416Schenli %res = call <2 x i64> @llvm.loongarch.lsx.vmax.du(<2 x i64> %va, <2 x i64> %vb) 145*f3aa4416Schenli ret <2 x i64> %res 146*f3aa4416Schenli} 147*f3aa4416Schenli 148*f3aa4416Schenlideclare <16 x i8> @llvm.loongarch.lsx.vmaxi.bu(<16 x i8>, i32) 149*f3aa4416Schenli 150*f3aa4416Schenlidefine <16 x i8> @lsx_vmaxi_bu(<16 x i8> %va) nounwind { 151*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_bu: 152*f3aa4416Schenli; CHECK: # %bb.0: # %entry 153*f3aa4416Schenli; CHECK-NEXT: vmaxi.bu $vr0, $vr0, 1 154*f3aa4416Schenli; CHECK-NEXT: ret 155*f3aa4416Schenlientry: 156*f3aa4416Schenli %res = call <16 x i8> @llvm.loongarch.lsx.vmaxi.bu(<16 x i8> %va, i32 1) 157*f3aa4416Schenli ret <16 x i8> %res 158*f3aa4416Schenli} 159*f3aa4416Schenli 160*f3aa4416Schenlideclare <8 x i16> @llvm.loongarch.lsx.vmaxi.hu(<8 x i16>, i32) 161*f3aa4416Schenli 162*f3aa4416Schenlidefine <8 x i16> @lsx_vmaxi_hu(<8 x i16> %va) nounwind { 163*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_hu: 164*f3aa4416Schenli; CHECK: # %bb.0: # %entry 165*f3aa4416Schenli; CHECK-NEXT: vmaxi.hu $vr0, $vr0, 1 166*f3aa4416Schenli; CHECK-NEXT: ret 167*f3aa4416Schenlientry: 168*f3aa4416Schenli %res = call <8 x i16> @llvm.loongarch.lsx.vmaxi.hu(<8 x i16> %va, i32 1) 169*f3aa4416Schenli ret <8 x i16> %res 170*f3aa4416Schenli} 171*f3aa4416Schenli 172*f3aa4416Schenlideclare <4 x i32> @llvm.loongarch.lsx.vmaxi.wu(<4 x i32>, i32) 173*f3aa4416Schenli 174*f3aa4416Schenlidefine <4 x i32> @lsx_vmaxi_wu(<4 x i32> %va) nounwind { 175*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_wu: 176*f3aa4416Schenli; CHECK: # %bb.0: # %entry 177*f3aa4416Schenli; CHECK-NEXT: vmaxi.wu $vr0, $vr0, 31 178*f3aa4416Schenli; CHECK-NEXT: ret 179*f3aa4416Schenlientry: 180*f3aa4416Schenli %res = call <4 x i32> @llvm.loongarch.lsx.vmaxi.wu(<4 x i32> %va, i32 31) 181*f3aa4416Schenli ret <4 x i32> %res 182*f3aa4416Schenli} 183*f3aa4416Schenli 184*f3aa4416Schenlideclare <2 x i64> @llvm.loongarch.lsx.vmaxi.du(<2 x i64>, i32) 185*f3aa4416Schenli 186*f3aa4416Schenlidefine <2 x i64> @lsx_vmaxi_du(<2 x i64> %va) nounwind { 187*f3aa4416Schenli; CHECK-LABEL: lsx_vmaxi_du: 188*f3aa4416Schenli; CHECK: # %bb.0: # %entry 189*f3aa4416Schenli; CHECK-NEXT: vmaxi.du $vr0, $vr0, 31 190*f3aa4416Schenli; CHECK-NEXT: ret 191*f3aa4416Schenlientry: 192*f3aa4416Schenli %res = call <2 x i64> @llvm.loongarch.lsx.vmaxi.du(<2 x i64> %va, i32 31) 193*f3aa4416Schenli ret <2 x i64> %res 194*f3aa4416Schenli} 195