231 lines · plain
1! RUN: %flang_fc1 -flang-experimental-hlfir -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR" %s2! REQUIRES: target=powerpc{{.*}}3 4!------------5! vec_mergeh6!------------7 8 ! CHECK-LABEL: vec_mergeh_test_i19subroutine vec_mergeh_test_i1(arg1, arg2)10 vector(integer(1)) :: arg1, arg2, r11 r = vec_mergeh(arg1, arg2)12 13! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 1614! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 1615! LLVMIR: %[[r:.*]] = shufflevector <16 x i8> %[[arg1]], <16 x i8> %[[arg2]], <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>16! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 1617end subroutine vec_mergeh_test_i118 19! CHECK-LABEL: vec_mergeh_test_i220subroutine vec_mergeh_test_i2(arg1, arg2)21 vector(integer(2)) :: arg1, arg2, r22 r = vec_mergeh(arg1, arg2)23 24! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 1625! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 1626! LLVMIR: %[[r:.*]] = shufflevector <8 x i16> %[[arg1]], <8 x i16> %[[arg2]], <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>27! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 1628end subroutine vec_mergeh_test_i229 30! CHECK-LABEL: vec_mergeh_test_i431subroutine vec_mergeh_test_i4(arg1, arg2)32 vector(integer(4)) :: arg1, arg2, r33 r = vec_mergeh(arg1, arg2)34 35! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 1636! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 1637! LLVMIR: %[[r:.*]] = shufflevector <4 x i32> %[[arg1]], <4 x i32> %[[arg2]], <4 x i32> <i32 0, i32 4, i32 1, i32 5>38! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 1639end subroutine vec_mergeh_test_i440 41! CHECK-LABEL: vec_mergeh_test_i842subroutine vec_mergeh_test_i8(arg1, arg2)43 vector(integer(8)) :: arg1, arg2, r44 r = vec_mergeh(arg1, arg2)45 46! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 1647! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 1648! LLVMIR: %[[r:.*]] = shufflevector <2 x i64> %[[arg1]], <2 x i64> %[[arg2]], <2 x i32> <i32 0, i32 2>49! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 1650end subroutine vec_mergeh_test_i851 52! CHECK-LABEL: vec_mergeh_test_u153subroutine vec_mergeh_test_u1(arg1, arg2)54 vector(unsigned(1)) :: arg1, arg2, r55 r = vec_mergeh(arg1, arg2)56 57! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 1658! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 1659! LLVMIR: %[[r:.*]] = shufflevector <16 x i8> %[[arg1]], <16 x i8> %[[arg2]], <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>60! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 1661end subroutine vec_mergeh_test_u162 63! CHECK-LABEL: vec_mergeh_test_u264subroutine vec_mergeh_test_u2(arg1, arg2)65 vector(unsigned(2)) :: arg1, arg2, r66 r = vec_mergeh(arg1, arg2)67 68! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 1669! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 1670! LLVMIR: %[[r:.*]] = shufflevector <8 x i16> %[[arg1]], <8 x i16> %[[arg2]], <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11>71! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 1672end subroutine vec_mergeh_test_u273 74! CHECK-LABEL: vec_mergeh_test_u475subroutine vec_mergeh_test_u4(arg1, arg2)76 vector(unsigned(4)) :: arg1, arg2, r77 r = vec_mergeh(arg1, arg2)78 79! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 1680! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 1681! LLVMIR: %[[r:.*]] = shufflevector <4 x i32> %[[arg1]], <4 x i32> %[[arg2]], <4 x i32> <i32 0, i32 4, i32 1, i32 5>82! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 1683end subroutine vec_mergeh_test_u484 85! CHECK-LABEL: vec_mergeh_test_u886subroutine vec_mergeh_test_u8(arg1, arg2)87 vector(unsigned(8)) :: arg1, arg2, r88 r = vec_mergeh(arg1, arg2)89 90! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 1691! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 1692! LLVMIR: %[[r:.*]] = shufflevector <2 x i64> %[[arg1]], <2 x i64> %[[arg2]], <2 x i32> <i32 0, i32 2>93! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 1694end subroutine vec_mergeh_test_u895 96! CHECK-LABEL: vec_mergeh_test_r497subroutine vec_mergeh_test_r4(arg1, arg2)98 vector(real(4)) :: arg1, arg2, r99 r = vec_mergeh(arg1, arg2)100 101! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16102! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16103! LLVMIR: %[[r:.*]] = shufflevector <4 x float> %[[arg1]], <4 x float> %[[arg2]], <4 x i32> <i32 0, i32 4, i32 1, i32 5>104! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16105end subroutine vec_mergeh_test_r4106 107! CHECK-LABEL: vec_mergeh_test_r8108subroutine vec_mergeh_test_r8(arg1, arg2)109 vector(real(8)) :: arg1, arg2, r110 r = vec_mergeh(arg1, arg2)111 112! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16113! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16114! LLVMIR: %[[r:.*]] = shufflevector <2 x double> %[[arg1]], <2 x double> %[[arg2]], <2 x i32> <i32 0, i32 2>115! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16116end subroutine vec_mergeh_test_r8117 118!------------119! vec_mergel120!------------121 122! CHECK-LABEL: vec_mergel_test_i1123subroutine vec_mergel_test_i1(arg1, arg2)124 vector(integer(1)) :: arg1, arg2, r125 r = vec_mergel(arg1, arg2)126 127! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16128! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16129! LLVMIR: %[[r:.*]] = shufflevector <16 x i8> %[[arg1]], <16 x i8> %[[arg2]], <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>130! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16131end subroutine vec_mergel_test_i1132 133! CHECK-LABEL: vec_mergel_test_i2134subroutine vec_mergel_test_i2(arg1, arg2)135 vector(integer(2)) :: arg1, arg2, r136 r = vec_mergel(arg1, arg2)137 138! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16139! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16140! LLVMIR: %[[r:.*]] = shufflevector <8 x i16> %[[arg1]], <8 x i16> %[[arg2]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>141! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16142end subroutine vec_mergel_test_i2143 144! CHECK-LABEL: vec_mergel_test_i4145subroutine vec_mergel_test_i4(arg1, arg2)146 vector(integer(4)) :: arg1, arg2, r147 r = vec_mergel(arg1, arg2)148 149! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16150! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16151! LLVMIR: %[[r:.*]] = shufflevector <4 x i32> %[[arg1]], <4 x i32> %[[arg2]], <4 x i32> <i32 2, i32 6, i32 3, i32 7>152! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16153end subroutine vec_mergel_test_i4154 155! CHECK-LABEL: vec_mergel_test_i8156subroutine vec_mergel_test_i8(arg1, arg2)157 vector(integer(8)) :: arg1, arg2, r158 r = vec_mergel(arg1, arg2)159 160! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16161! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16162! LLVMIR: %[[r:.*]] = shufflevector <2 x i64> %[[arg1]], <2 x i64> %[[arg2]], <2 x i32> <i32 1, i32 3>163! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16164end subroutine vec_mergel_test_i8165 166! CHECK-LABEL: vec_mergel_test_u1167subroutine vec_mergel_test_u1(arg1, arg2)168 vector(unsigned(1)) :: arg1, arg2, r169 r = vec_mergel(arg1, arg2)170 171! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16172! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16173! LLVMIR: %[[r:.*]] = shufflevector <16 x i8> %[[arg1]], <16 x i8> %[[arg2]], <16 x i32> <i32 8, i32 24, i32 9, i32 25, i32 10, i32 26, i32 11, i32 27, i32 12, i32 28, i32 13, i32 29, i32 14, i32 30, i32 15, i32 31>174! LLVMIR: store <16 x i8> %[[r]], ptr %{{.*}}, align 16175end subroutine vec_mergel_test_u1176 177! CHECK-LABEL: vec_mergel_test_u2178subroutine vec_mergel_test_u2(arg1, arg2)179 vector(unsigned(2)) :: arg1, arg2, r180 r = vec_mergel(arg1, arg2)181 182! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16183! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16184! LLVMIR: %[[r:.*]] = shufflevector <8 x i16> %[[arg1]], <8 x i16> %[[arg2]], <8 x i32> <i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>185! LLVMIR: store <8 x i16> %[[r]], ptr %{{.*}}, align 16186end subroutine vec_mergel_test_u2187 188! CHECK-LABEL: vec_mergel_test_u4189subroutine vec_mergel_test_u4(arg1, arg2)190 vector(unsigned(4)) :: arg1, arg2, r191 r = vec_mergel(arg1, arg2)192 193! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16194! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16195! LLVMIR: %[[r:.*]] = shufflevector <4 x i32> %[[arg1]], <4 x i32> %[[arg2]], <4 x i32> <i32 2, i32 6, i32 3, i32 7>196! LLVMIR: store <4 x i32> %[[r]], ptr %{{.*}}, align 16197end subroutine vec_mergel_test_u4198 199! CHECK-LABEL: vec_mergel_test_u8200subroutine vec_mergel_test_u8(arg1, arg2)201 vector(unsigned(8)) :: arg1, arg2, r202 r = vec_mergel(arg1, arg2)203 204! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16205! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16206! LLVMIR: %[[r:.*]] = shufflevector <2 x i64> %[[arg1]], <2 x i64> %[[arg2]], <2 x i32> <i32 1, i32 3>207! LLVMIR: store <2 x i64> %[[r]], ptr %{{.*}}, align 16208end subroutine vec_mergel_test_u8209 210! CHECK-LABEL: vec_mergel_test_r4211subroutine vec_mergel_test_r4(arg1, arg2)212 vector(real(4)) :: arg1, arg2, r213 r = vec_mergel(arg1, arg2)214 215! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16216! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16217! LLVMIR: %[[r:.*]] = shufflevector <4 x float> %[[arg1]], <4 x float> %[[arg2]], <4 x i32> <i32 2, i32 6, i32 3, i32 7>218! LLVMIR: store <4 x float> %[[r]], ptr %{{.*}}, align 16219end subroutine vec_mergel_test_r4220 221! CHECK-LABEL: vec_mergel_test_r8222subroutine vec_mergel_test_r8(arg1, arg2)223 vector(real(8)) :: arg1, arg2, r224 r = vec_mergel(arg1, arg2)225 226! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16227! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16228! LLVMIR: %[[r:.*]] = shufflevector <2 x double> %[[arg1]], <2 x double> %[[arg2]], <2 x i32> <i32 1, i32 3>229! LLVMIR: store <2 x double> %[[r]], ptr %{{.*}}, align 16230end subroutine vec_mergel_test_r8231