brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.1 KiB · 32c0dcf Raw
320 lines · plain
1! RUN: %flang_fc1 -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-LE" %s2! RUN: %flang_fc1 -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR","LLVMIR-BE" %s3! REQUIRES: target=powerpc{{.*}}4 5!-------------6! vec_extract7!-------------8! CHECK-LABEL: vec_extract_testf329subroutine vec_extract_testf32(x, i1, i2, i4, i8)10  vector(real(4)) :: x11  real(4) :: r12  integer(1) :: i113  integer(2) :: i214  integer(4) :: i415  integer(8) :: i816  r = vec_extract(x, i1)17 18! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1619! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 120! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 421! LLVMIR-BE: %[[s:.*]] = sub i8 3, %[[u]]22! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i6423! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i6424! LLVMIR: %[[r:.*]] = extractelement <4 x float> %[[x]], i64 %[[idx]]25! LLVMIR: store float %[[r]], ptr %{{[0-9]}}, align 426 27  r = vec_extract(x, i2)28 29! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1630! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 231! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 432! LLVMIR-BE: %[[s:.*]] = sub i16 3, %[[u]]33! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i6434! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i6435! LLVMIR: %[[r:.*]] = extractelement <4 x float> %[[x]], i64 %[[idx]]36! LLVMIR: store float %[[r]], ptr %{{[0-9]}}, align 437 38  r = vec_extract(x, i4)39 40! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1641! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 442! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 443! LLVMIR-BE: %[[s:.*]] = sub i32 3, %[[u]]44! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i6445! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i6446! LLVMIR: %[[r:.*]] = extractelement <4 x float> %[[x]], i64 %[[idx]]47! LLVMIR: store float %[[r]], ptr %{{[0-9]}}, align 448 49  r = vec_extract(x, i8)50 51! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1652! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 853! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 454! LLVMIR-BE: %[[idx:.*]] = sub i64 3, %[[u]]55! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 456! LLVMIR: %[[r:.*]] = extractelement <4 x float> %[[x]], i64 %[[idx]]57! LLVMIR: store float %[[r]], ptr %{{[0-9]}}, align 458end subroutine vec_extract_testf3259 60! CHECK-LABEL: vec_extract_testf6461subroutine vec_extract_testf64(x, i1, i2, i4, i8)62  vector(real(8)) :: x63  real(8) :: r64  integer(1) :: i165  integer(2) :: i266  integer(4) :: i467  integer(8) :: i868  r = vec_extract(x, i1)69 70! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 1671! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 172! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 273! LLVMIR-BE: %[[s:.*]] = sub i8 1, %[[u]]74! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i6475! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i6476! LLVMIR: %[[r:.*]] = extractelement <2 x double> %[[x]], i64 %[[idx]]77! LLVMIR: store double %[[r]], ptr %{{[0-9]}}, align 878 79  r = vec_extract(x, i2)80 81! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 1682! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 283! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 284! LLVMIR-BE: %[[s:.*]] = sub i16 1, %[[u]]85! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i6486! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i6487! LLVMIR: %[[r:.*]] = extractelement <2 x double> %[[x]], i64 %[[idx]]88! LLVMIR: store double %[[r]], ptr %{{[0-9]}}, align 889 90 91  r = vec_extract(x, i4)92 93! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 1694! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 495! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 296! LLVMIR-BE: %[[s:.*]] = sub i32 1, %[[u]]97! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i6498! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i6499! LLVMIR: %[[r:.*]] = extractelement <2 x double> %[[x]], i64 %[[idx]]100! LLVMIR: store double %[[r]], ptr %{{[0-9]}}, align 8101 102  r = vec_extract(x, i8)103 104! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16105! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8106! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 2107! LLVMIR-BE: %[[idx:.*]] = sub i64 1, %[[u]]108! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 2109! LLVMIR: %[[r:.*]] = extractelement <2 x double> %[[x]], i64 %[[idx]]110! LLVMIR: store double %[[r]], ptr %{{[0-9]}}, align 8111end subroutine vec_extract_testf64112 113! CHECK-LABEL: vec_extract_testi8114subroutine vec_extract_testi8(x, i1, i2, i4, i8)115  vector(integer(1)) :: x116  integer(1) :: r117  integer(1) :: i1118  integer(2) :: i2119  integer(4) :: i4120  integer(8) :: i8121  r = vec_extract(x, i1)122 123! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16124! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1125! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 16126! LLVMIR-BE: %[[s:.*]] = sub i8 15, %[[u]]127! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64128! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i64129! LLVMIR: %[[r:.*]] = extractelement <16 x i8> %[[x]], i64 %[[idx]]130! LLVMIR: store i8 %[[r]], ptr %{{[0-9]}}, align 1131 132  r = vec_extract(x, i2)133 134! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16135! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2136! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 16137! LLVMIR-BE: %[[s:.*]] = sub i16 15, %[[u]]138! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64139! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i64140! LLVMIR: %[[r:.*]] = extractelement <16 x i8> %[[x]], i64 %[[idx]]141! LLVMIR: store i8 %[[r]], ptr %{{[0-9]}}, align 1142 143  r = vec_extract(x, i4)144 145! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16146! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4147! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 16148! LLVMIR-BE: %[[s:.*]] = sub i32 15, %[[u]]149! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64150! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i64151! LLVMIR: %[[r:.*]] = extractelement <16 x i8> %[[x]], i64 %[[idx]]152! LLVMIR: store i8 %[[r]], ptr %{{[0-9]}}, align 1153 154  r = vec_extract(x, i8)155 156! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16157! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8158! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 16159! LLVMIR-BE: %[[idx:.*]] = sub i64 15, %[[u]]160! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 16161! LLVMIR: %[[r:.*]] = extractelement <16 x i8> %[[x]], i64 %[[idx]]162! LLVMIR: store i8 %[[r]], ptr %{{[0-9]}}, align 1163end subroutine vec_extract_testi8164 165! CHECK-LABEL: vec_extract_testi16166subroutine vec_extract_testi16(x, i1, i2, i4, i8)167  vector(integer(2)) :: x168  integer(2) :: r169  integer(1) :: i1170  integer(2) :: i2171  integer(4) :: i4172  integer(8) :: i8173  r = vec_extract(x, i1)174 175! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16176! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1177! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 8178! LLVMIR-BE: %[[s:.*]] = sub i8 7, %[[u]]179! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64180! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i64181! LLVMIR: %[[r:.*]] = extractelement <8 x i16> %[[x]], i64 %[[idx]]182! LLVMIR: store i16 %[[r]], ptr %{{[0-9]}}, align 2183 184  r = vec_extract(x, i2)185 186! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16187! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2188! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 8189! LLVMIR-BE: %[[s:.*]] = sub i16 7, %[[u]]190! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64191! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i64192! LLVMIR: %[[r:.*]] = extractelement <8 x i16> %[[x]], i64 %[[idx]]193! LLVMIR: store i16 %[[r]], ptr %{{[0-9]}}, align 2194 195  r = vec_extract(x, i4)196 197! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16198! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4199! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 8200! LLVMIR-BE: %[[s:.*]] = sub i32 7, %[[u]]201! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64202! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i64203! LLVMIR: %[[r:.*]] = extractelement <8 x i16> %[[x]], i64 %[[idx]]204! LLVMIR: store i16 %[[r]], ptr %{{[0-9]}}, align 2205 206  r = vec_extract(x, i8)207 208! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16209! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8210! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 8211! LLVMIR-BE: %[[idx:.*]] = sub i64 7, %[[u]]212! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 8213! LLVMIR: %[[r:.*]] = extractelement <8 x i16> %[[x]], i64 %[[idx]]214! LLVMIR: store i16 %[[r]], ptr %{{[0-9]}}, align 2215end subroutine vec_extract_testi16216 217! CHECK-LABEL: vec_extract_testi32218subroutine vec_extract_testi32(x, i1, i2, i4, i8)219  vector(integer(4)) :: x220  integer(4) :: r221  integer(1) :: i1222  integer(2) :: i2223  integer(4) :: i4224  integer(8) :: i8225  r = vec_extract(x, i1)226 227! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16228! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1229! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 4230! LLVMIR-BE: %[[s:.*]] = sub i8 3, %[[u]]231! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64232! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i64233! LLVMIR: %[[r:.*]] = extractelement <4 x i32> %[[x]], i64 %[[idx]]234! LLVMIR: store i32 %[[r]], ptr %{{[0-9]}}, align 4235 236  r = vec_extract(x, i2)237 238! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16239! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2240! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 4241! LLVMIR-BE: %[[s:.*]] = sub i16 3, %[[u]]242! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64243! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i64244! LLVMIR: %[[r:.*]] = extractelement <4 x i32> %[[x]], i64 %[[idx]]245! LLVMIR: store i32 %[[r]], ptr %{{[0-9]}}, align 4246 247  r = vec_extract(x, i4)248 249! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16250! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4251! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 4252! LLVMIR-BE: %[[s:.*]] = sub i32 3, %[[u]]253! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64254! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i64255! LLVMIR: %[[r:.*]] = extractelement <4 x i32> %[[x]], i64 %[[idx]]256! LLVMIR: store i32 %[[r]], ptr %{{[0-9]}}, align 4257 258  r = vec_extract(x, i8)259 260! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16261! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8262! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 4263! LLVMIR-BE: %[[idx:.*]] = sub i64 3, %[[u]]264! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 4265! LLVMIR: %[[r:.*]] = extractelement <4 x i32> %[[x]], i64 %[[idx]]266! LLVMIR: store i32 %[[r]], ptr %{{[0-9]}}, align 4267end subroutine vec_extract_testi32268 269! CHECK-LABEL: vec_extract_testi64270subroutine vec_extract_testi64(x, i1, i2, i4, i8)271  vector(integer(8)) :: x272  integer(8) :: r273  integer(1) :: i1274  integer(2) :: i2275  integer(4) :: i4276  integer(8) :: i8277  r = vec_extract(x, i1)278 279! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16280! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1281! LLVMIR: %[[u:.*]] = urem i8 %[[i1]], 2282! LLVMIR-BE: %[[s:.*]] = sub i8 1, %[[u]]283! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64284! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[u]] to i64285! LLVMIR: %[[r:.*]] = extractelement <2 x i64> %[[x]], i64 %[[idx]]286! LLVMIR: store i64 %[[r]], ptr %{{[0-9]}}, align 8287 288  r = vec_extract(x, i2)289 290! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16291! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2292! LLVMIR: %[[u:.*]] = urem i16 %[[i2]], 2293! LLVMIR-BE: %[[s:.*]] = sub i16 1, %[[u]]294! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64295! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[u]] to i64296! LLVMIR: %[[r:.*]] = extractelement <2 x i64> %[[x]], i64 %[[idx]]297! LLVMIR: store i64 %[[r]], ptr %{{[0-9]}}, align 8298 299  r = vec_extract(x, i4)300 301! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16302! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4303! LLVMIR: %[[u:.*]] = urem i32 %[[i4]], 2304! LLVMIR-BE: %[[s:.*]] = sub i32 1, %[[u]]305! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64306! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[u]] to i64307! LLVMIR: %[[r:.*]] = extractelement <2 x i64> %[[x]], i64 %[[idx]]308! LLVMIR: store i64 %[[r]], ptr %{{[0-9]}}, align 8309 310  r = vec_extract(x, i8)311 312! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16313! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8314! LLVMIR-BE: %[[u:.*]] = urem i64 %[[i8]], 2315! LLVMIR-BE: %[[idx:.*]] = sub i64 1, %[[u]]316! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 2317! LLVMIR: %[[r:.*]] = extractelement <2 x i64> %[[x]], i64 %[[idx]]318! LLVMIR: store i64 %[[r]], ptr %{{[0-9]}}, align 8319end subroutine vec_extract_testi64320