348 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! vec_insert6 7!CHECK-LABEL: vec_insert_testf328subroutine vec_insert_testf32(v, x, i1, i2, i4, i8)9 real(4) :: v10 vector(real(4)) :: x11 vector(real(4)) :: r12 integer(1) :: i113 integer(2) :: i214 integer(4) :: i415 integer(8) :: i816 r = vec_insert(v, x, i1)17 18! LLVMIR: %[[v:.*]] = load float, ptr %{{[0-9]}}, align 419! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1620! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 121! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 422! LLVMIR-BE: %[[s:.*]] = sub i8 3, %[[urem]]23! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i6424! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i6425! LLVMIR: %[[r:.*]] = insertelement <4 x float> %[[x]], float %[[v]], i64 %[[idx]]26! LLVMIR: store <4 x float> %[[r]], ptr %{{[0-9]}}, align 1627 28 r = vec_insert(v, x, i2)29 30! LLVMIR: %[[v:.*]] = load float, ptr %{{[0-9]}}, align 431! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1632! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 233! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 434! LLVMIR-BE: %[[s:.*]] = sub i16 3, %[[urem]]35! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i6436! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i6437! LLVMIR: %[[r:.*]] = insertelement <4 x float> %[[x]], float %[[v]], i64 %[[idx]]38! LLVMIR: store <4 x float> %[[r]], ptr %{{[0-9]}}, align 1639 40 r = vec_insert(v, x, i4)41 42! LLVMIR: %[[v:.*]] = load float, ptr %{{[0-9]}}, align 443! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1644! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 445! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 446! LLVMIR-BE: %[[s:.*]] = sub i32 3, %[[urem]]47! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i6448! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i6449! LLVMIR: %[[r:.*]] = insertelement <4 x float> %[[x]], float %[[v]], i64 %[[idx]]50! LLVMIR: store <4 x float> %[[r]], ptr %{{[0-9]}}, align 1651 52 r = vec_insert(v, x, i8)53 54! LLVMIR: %[[v:.*]] = load float, ptr %{{[0-9]}}, align 455! LLVMIR: %[[x:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 1656! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 857! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 458! LLVMIR-BE: %[[idx:.*]] = sub i64 3, %[[urem]]59! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 460! LLVMIR: %[[r:.*]] = insertelement <4 x float> %[[x]], float %[[v]], i64 %[[idx]]61! LLVMIR: store <4 x float> %[[r]], ptr %{{[0-9]}}, align 1662end subroutine vec_insert_testf3263 64!CHECK-LABEL: vec_insert_testf6465subroutine vec_insert_testf64(v, x, i1, i2, i4, i8)66 real(8) :: v67 vector(real(8)) :: x68 vector(real(8)) :: r69 integer(1) :: i170 integer(2) :: i271 integer(4) :: i472 integer(8) :: i873 r = vec_insert(v, x, i1)74 75! LLVMIR: %[[v:.*]] = load double, ptr %{{[0-9]}}, align 876! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 1677! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 178! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 279! LLVMIR-BE: %[[s:.*]] = sub i8 1, %[[urem]]80! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i6481! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i6482! LLVMIR: %[[r:.*]] = insertelement <2 x double> %[[x]], double %[[v]], i64 %[[idx]]83! LLVMIR: store <2 x double> %[[r]], ptr %{{[0-9]}}, align 1684 85 r = vec_insert(v, x, i2)86 87! LLVMIR: %[[v:.*]] = load double, ptr %{{[0-9]}}, align 888! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 1689! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 290! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 291! LLVMIR-BE: %[[s:.*]] = sub i16 1, %[[urem]]92! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i6493! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i6494! LLVMIR: %[[r:.*]] = insertelement <2 x double> %[[x]], double %[[v]], i64 %[[idx]]95! LLVMIR: store <2 x double> %[[r]], ptr %{{[0-9]}}, align 1696 97 r = vec_insert(v, x, i4)98 99! LLVMIR: %[[v:.*]] = load double, ptr %{{[0-9]}}, align 8100! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16101! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4102! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 2103! LLVMIR-BE: %[[s:.*]] = sub i32 1, %[[urem]]104! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64105! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i64106! LLVMIR: %[[r:.*]] = insertelement <2 x double> %[[x]], double %[[v]], i64 %[[idx]]107! LLVMIR: store <2 x double> %[[r]], ptr %{{[0-9]}}, align 16108 109 r = vec_insert(v, x, i8)110 111! LLVMIR: %[[v:.*]] = load double, ptr %{{[0-9]}}, align 8112! LLVMIR: %[[x:.*]] = load <2 x double>, ptr %{{[0-9]}}, align 16113! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8114! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 2115! LLVMIR-BE: %[[idx:.*]] = sub i64 1, %[[urem]]116! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 2117! LLVMIR: %[[r:.*]] = insertelement <2 x double> %[[x]], double %[[v]], i64 %[[idx]]118! LLVMIR: store <2 x double> %[[r]], ptr %{{[0-9]}}, align 16119end subroutine vec_insert_testf64120 121!CHECK-LABEL: vec_insert_testi8122subroutine vec_insert_testi8(v, x, i1, i2, i4, i8)123 integer(1) :: v124 vector(integer(1)) :: x125 vector(integer(1)) :: r126 integer(1) :: i1127 integer(2) :: i2128 integer(4) :: i4129 integer(8) :: i8130 r = vec_insert(v, x, i1)131 132! LLVMIR: %[[v:.*]] = load i8, ptr %{{[0-9]}}, align 1133! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16134! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1135! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 16136! LLVMIR-BE: %[[s:.*]] = sub i8 15, %[[urem]]137! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64138! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i64139! LLVMIR: %[[r:.*]] = insertelement <16 x i8> %[[x]], i8 %[[v]], i64 %[[idx]]140! LLVMIR: store <16 x i8> %[[r]], ptr %{{[0-9]}}, align 16141 142 r = vec_insert(v, x, i2)143 144! LLVMIR: %[[v:.*]] = load i8, ptr %{{[0-9]}}, align 1145! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16146! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2147! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 16148! LLVMIR-BE: %[[s:.*]] = sub i16 15, %[[urem]]149! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64150! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i64151! LLVMIR: %[[r:.*]] = insertelement <16 x i8> %[[x]], i8 %[[v]], i64 %[[idx]]152! LLVMIR: store <16 x i8> %[[r]], ptr %{{[0-9]}}, align 16153 154 r = vec_insert(v, x, i4)155 156! LLVMIR: %[[v:.*]] = load i8, ptr %{{[0-9]}}, align 1157! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16158! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4159! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 16160! LLVMIR-BE: %[[s:.*]] = sub i32 15, %[[urem]]161! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64162! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i64163! LLVMIR: %[[r:.*]] = insertelement <16 x i8> %[[x]], i8 %[[v]], i64 %[[idx]]164! LLVMIR: store <16 x i8> %[[r]], ptr %{{[0-9]}}, align 16165 166 r = vec_insert(v, x, i8)167 168! LLVMIR: %[[v:.*]] = load i8, ptr %{{[0-9]}}, align 1169! LLVMIR: %[[x:.*]] = load <16 x i8>, ptr %{{[0-9]}}, align 16170! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8171! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 16172! LLVMIR-BE: %[[idx:.*]] = sub i64 15, %[[urem]]173! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 16174! LLVMIR: %[[r:.*]] = insertelement <16 x i8> %[[x]], i8 %[[v]], i64 %[[idx]]175! LLVMIR: store <16 x i8> %[[r]], ptr %{{[0-9]}}, align 16176end subroutine vec_insert_testi8177 178!CHECK-LABEL: vec_insert_testi16179subroutine vec_insert_testi16(v, x, i1, i2, i4, i8)180 integer(2) :: v181 vector(integer(2)) :: x182 vector(integer(2)) :: r183 integer(1) :: i1184 integer(2) :: i2185 integer(4) :: i4186 integer(8) :: i8187 r = vec_insert(v, x, i1)188 189! LLVMIR: %[[v:.*]] = load i16, ptr %{{[0-9]}}, align 2190! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16191! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1192! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 8193! LLVMIR-BE: %[[s:.*]] = sub i8 7, %[[urem]]194! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64195! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i64196! LLVMIR: %[[r:.*]] = insertelement <8 x i16> %[[x]], i16 %[[v]], i64 %[[idx]]197! LLVMIR: store <8 x i16> %[[r]], ptr %{{[0-9]}}, align 16198 199 r = vec_insert(v, x, i2)200 201! LLVMIR: %[[v:.*]] = load i16, ptr %{{[0-9]}}, align 2202! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16203! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2204! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 8205! LLVMIR-BE: %[[s:.*]] = sub i16 7, %[[urem]]206! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64207! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i64208! LLVMIR: %[[r:.*]] = insertelement <8 x i16> %[[x]], i16 %[[v]], i64 %[[idx]]209! LLVMIR: store <8 x i16> %[[r]], ptr %{{[0-9]}}, align 16210 211 r = vec_insert(v, x, i4)212 213! LLVMIR: %[[v:.*]] = load i16, ptr %{{[0-9]}}, align 2214! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16215! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4216! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 8217! LLVMIR-BE: %[[s:.*]] = sub i32 7, %[[urem]]218! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64219! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i64220! LLVMIR: %[[r:.*]] = insertelement <8 x i16> %[[x]], i16 %[[v]], i64 %[[idx]]221! LLVMIR: store <8 x i16> %[[r]], ptr %{{[0-9]}}, align 16222 223 r = vec_insert(v, x, i8)224 225! LLVMIR: %[[v:.*]] = load i16, ptr %{{[0-9]}}, align 2226! LLVMIR: %[[x:.*]] = load <8 x i16>, ptr %{{[0-9]}}, align 16227! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8228! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 8229! LLVMIR-BE: %[[idx:.*]] = sub i64 7, %[[urem]]230! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 8231! LLVMIR: %[[r:.*]] = insertelement <8 x i16> %[[x]], i16 %[[v]], i64 %[[idx]]232! LLVMIR: store <8 x i16> %[[r]], ptr %{{[0-9]}}, align 16233end subroutine vec_insert_testi16234 235!CHECK-LABEL: vec_insert_testi32236subroutine vec_insert_testi32(v, x, i1, i2, i4, i8)237 integer(4) :: v238 vector(integer(4)) :: x239 vector(integer(4)) :: r240 integer(1) :: i1241 integer(2) :: i2242 integer(4) :: i4243 integer(8) :: i8244 r = vec_insert(v, x, i1)245 246! LLVMIR: %[[v:.*]] = load i32, ptr %{{[0-9]}}, align 4247! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16248! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1249! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 4250! LLVMIR-BE: %[[s:.*]] = sub i8 3, %[[urem]]251! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64252! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i64253! LLVMIR: %[[r:.*]] = insertelement <4 x i32> %[[x]], i32 %[[v]], i64 %[[idx]]254! LLVMIR: store <4 x i32> %[[r]], ptr %{{[0-9]}}, align 16255 256 r = vec_insert(v, x, i2)257 258! LLVMIR: %[[v:.*]] = load i32, ptr %{{[0-9]}}, align 4259! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16260! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2261! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 4262! LLVMIR-BE: %[[s:.*]] = sub i16 3, %[[urem]]263! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64264! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i64265! LLVMIR: %[[r:.*]] = insertelement <4 x i32> %[[x]], i32 %[[v]], i64 %[[idx]]266! LLVMIR: store <4 x i32> %[[r]], ptr %{{[0-9]}}, align 16267 268 r = vec_insert(v, x, i4)269 270! LLVMIR: %[[v:.*]] = load i32, ptr %{{[0-9]}}, align 4271! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16272! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4273! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 4274! LLVMIR-BE: %[[s:.*]] = sub i32 3, %[[urem]]275! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64276! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i64277! LLVMIR: %[[r:.*]] = insertelement <4 x i32> %[[x]], i32 %[[v]], i64 %[[idx]]278! LLVMIR: store <4 x i32> %[[r]], ptr %{{[0-9]}}, align 16279 280 r = vec_insert(v, x, i8)281 282! LLVMIR: %[[v:.*]] = load i32, ptr %{{[0-9]}}, align 4283! LLVMIR: %[[x:.*]] = load <4 x i32>, ptr %{{[0-9]}}, align 16284! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8285! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 4286! LLVMIR-BE: %[[idx:.*]] = sub i64 3, %[[urem]]287! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 4288! LLVMIR: %[[r:.*]] = insertelement <4 x i32> %[[x]], i32 %[[v]], i64 %[[idx]]289! LLVMIR: store <4 x i32> %[[r]], ptr %{{[0-9]}}, align 16290end subroutine vec_insert_testi32291 292!CHECK-LABEL: vec_insert_testi64293subroutine vec_insert_testi64(v, x, i1, i2, i4, i8)294 integer(8) :: v295 vector(integer(8)) :: x296 vector(integer(8)) :: r297 integer(1) :: i1298 integer(2) :: i2299 integer(4) :: i4300 integer(8) :: i8301 r = vec_insert(v, x, i1)302 303! LLVMIR: %[[v:.*]] = load i64, ptr %{{[0-9]}}, align 8304! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16305! LLVMIR: %[[i1:.*]] = load i8, ptr %{{[0-9]}}, align 1306! LLVMIR: %[[urem:.*]] = urem i8 %[[i1]], 2307! LLVMIR-BE: %[[s:.*]] = sub i8 1, %[[urem]]308! LLVMIR-BE: %[[idx:.*]] = zext i8 %[[s]] to i64309! LLVMIR-LE: %[[idx:.*]] = zext i8 %[[urem]] to i64310! LLVMIR: %[[r:.*]] = insertelement <2 x i64> %[[x]], i64 %[[v]], i64 %[[idx]]311! LLVMIR: store <2 x i64> %[[r]], ptr %{{[0-9]}}, align 16312 313 r = vec_insert(v, x, i2)314 315! LLVMIR: %[[v:.*]] = load i64, ptr %{{[0-9]}}, align 8316! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16317! LLVMIR: %[[i2:.*]] = load i16, ptr %{{[0-9]}}, align 2318! LLVMIR: %[[urem:.*]] = urem i16 %[[i2]], 2319! LLVMIR-BE: %[[s:.*]] = sub i16 1, %[[urem]]320! LLVMIR-BE: %[[idx:.*]] = zext i16 %[[s]] to i64321! LLVMIR-LE: %[[idx:.*]] = zext i16 %[[urem]] to i64322! LLVMIR: %[[r:.*]] = insertelement <2 x i64> %[[x]], i64 %[[v]], i64 %[[idx]]323! LLVMIR: store <2 x i64> %[[r]], ptr %{{[0-9]}}, align 16324 325 r = vec_insert(v, x, i4)326 327! LLVMIR: %[[v:.*]] = load i64, ptr %{{[0-9]}}, align 8328! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16329! LLVMIR: %[[i4:.*]] = load i32, ptr %{{[0-9]}}, align 4330! LLVMIR: %[[urem:.*]] = urem i32 %[[i4]], 2331! LLVMIR-BE: %[[s:.*]] = sub i32 1, %[[urem]]332! LLVMIR-BE: %[[idx:.*]] = zext i32 %[[s]] to i64333! LLVMIR-LE: %[[idx:.*]] = zext i32 %[[urem]] to i64334! LLVMIR: %[[r:.*]] = insertelement <2 x i64> %[[x]], i64 %[[v]], i64 %[[idx]]335! LLVMIR: store <2 x i64> %[[r]], ptr %{{[0-9]}}, align 16336 337 r = vec_insert(v, x, i8)338 339! LLVMIR: %[[v:.*]] = load i64, ptr %{{[0-9]}}, align 8340! LLVMIR: %[[x:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16341! LLVMIR: %[[i8:.*]] = load i64, ptr %{{[0-9]}}, align 8342! LLVMIR-BE: %[[urem:.*]] = urem i64 %[[i8]], 2343! LLVMIR-BE: %[[idx:.*]] = sub i64 1, %[[urem]]344! LLVMIR-LE: %[[idx:.*]] = urem i64 %[[i8]], 2345! LLVMIR: %[[r:.*]] = insertelement <2 x i64> %[[x]], i64 %[[v]], i64 %[[idx]]346! LLVMIR: store <2 x i64> %[[r]], ptr %{{[0-9]}}, align 16347end subroutine vec_insert_testi64348