1! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64le-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR" %s 2! RUN: %flang_fc1 -flang-experimental-hlfir -triple powerpc64-unknown-unknown -emit-llvm %s -o - | FileCheck --check-prefixes="LLVMIR" %s 3! REQUIRES: target=powerpc{{.*}} 4 5!---------------------- 6! vec_cmpge 7!---------------------- 8 9! CHECK-LABEL: vec_cmpge_test_i8 10subroutine vec_cmpge_test_i8(arg1, arg2) 11 vector(integer(8)) :: arg1, arg2 12 vector(unsigned(8)) :: r 13 r = vec_cmpge(arg1, arg2) 14 15! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 16! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 17! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]]) 18! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1) 19end subroutine vec_cmpge_test_i8 20 21! CHECK-LABEL: vec_cmpge_test_i4 22subroutine vec_cmpge_test_i4(arg1, arg2) 23 vector(integer(4)) :: arg1, arg2 24 vector(unsigned(4)) :: r 25 r = vec_cmpge(arg1, arg2) 26 27! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 28! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 29! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]]) 30! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1) 31end subroutine vec_cmpge_test_i4 32 33! CHECK-LABEL: vec_cmpge_test_i2 34subroutine vec_cmpge_test_i2(arg1, arg2) 35 vector(integer(2)) :: arg1, arg2 36 vector(unsigned(2)) :: r 37 r = vec_cmpge(arg1, arg2) 38 39! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 40! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 41! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]]) 42! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1) 43end subroutine vec_cmpge_test_i2 44 45! CHECK-LABEL: vec_cmpge_test_i1 46subroutine vec_cmpge_test_i1(arg1, arg2) 47 vector(integer(1)) :: arg1, arg2 48 vector(unsigned(1)) :: r 49 r = vec_cmpge(arg1, arg2) 50 51! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 52! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 53! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]]) 54! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1) 55end subroutine vec_cmpge_test_i1 56 57! CHECK-LABEL: vec_cmpge_test_u8 58subroutine vec_cmpge_test_u8(arg1, arg2) 59 vector(unsigned(8)) :: arg1, arg2 60 vector(unsigned(8)) :: r 61 r = vec_cmpge(arg1, arg2) 62 63! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 64! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 65! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]]) 66! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1) 67end subroutine vec_cmpge_test_u8 68 69! CHECK-LABEL: vec_cmpge_test_u4 70subroutine vec_cmpge_test_u4(arg1, arg2) 71 vector(unsigned(4)) :: arg1, arg2 72 vector(unsigned(4)) :: r 73 r = vec_cmpge(arg1, arg2) 74 75! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 76! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 77! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]]) 78! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1) 79end subroutine vec_cmpge_test_u4 80 81! CHECK-LABEL: vec_cmpge_test_u2 82subroutine vec_cmpge_test_u2(arg1, arg2) 83 vector(unsigned(2)) :: arg1, arg2 84 vector(unsigned(2)) :: r 85 r = vec_cmpge(arg1, arg2) 86 87! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 88! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 89! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]]) 90! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1) 91end subroutine vec_cmpge_test_u2 92 93! CHECK-LABEL: vec_cmpge_test_u1 94subroutine vec_cmpge_test_u1(arg1, arg2) 95 vector(unsigned(1)) :: arg1, arg2 96 vector(unsigned(1)) :: r 97 r = vec_cmpge(arg1, arg2) 98 99! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 100! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 101! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]]) 102! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1) 103end subroutine vec_cmpge_test_u1 104 105subroutine vec_cmpge_test_r4(arg1, arg2) 106 vector(real(4)) :: arg1, arg2 107 vector(unsigned(4)) :: r 108 r = vec_cmpge(arg1, arg2) 109 110! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16 111! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16 112! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %[[arg1]], <4 x float> %[[arg2]]) 113end subroutine vec_cmpge_test_r4 114 115subroutine vec_cmpge_test_r8(arg1, arg2) 116 vector(real(8)) :: arg1, arg2 117 vector(unsigned(8)) :: r 118 r = vec_cmpge(arg1, arg2) 119 120! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16 121! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16 122! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %[[arg1]], <2 x double> %[[arg2]]) 123end subroutine vec_cmpge_test_r8 124 125!---------------------- 126! vec_cmpgt 127!---------------------- 128 129! CHECK-LABEL: vec_cmpgt_test_i1 130subroutine vec_cmpgt_test_i1(arg1, arg2) 131 vector(integer(1)) :: arg1, arg2 132 vector(unsigned(1)) :: r 133 r = vec_cmpgt(arg1, arg2) 134 135! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 136! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 137! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]]) 138end subroutine vec_cmpgt_test_i1 139 140! CHECK-LABEL: vec_cmpgt_test_i2 141subroutine vec_cmpgt_test_i2(arg1, arg2) 142 vector(integer(2)) :: arg1, arg2 143 vector(unsigned(2)) :: r 144 r = vec_cmpgt(arg1, arg2) 145 146! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 147! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 148! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]]) 149end subroutine vec_cmpgt_test_i2 150 151! CHECK-LABEL: vec_cmpgt_test_i4 152subroutine vec_cmpgt_test_i4(arg1, arg2) 153 vector(integer(4)) :: arg1, arg2 154 vector(unsigned(4)) :: r 155 r = vec_cmpgt(arg1, arg2) 156 157! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 158! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 159! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]]) 160end subroutine vec_cmpgt_test_i4 161 162! CHECK-LABEL: vec_cmpgt_test_i8 163subroutine vec_cmpgt_test_i8(arg1, arg2) 164 vector(integer(8)) :: arg1, arg2 165 vector(unsigned(8)) :: r 166 r = vec_cmpgt(arg1, arg2) 167 168! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 169! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 170! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]]) 171end subroutine vec_cmpgt_test_i8 172 173! CHECK-LABEL: vec_cmpgt_test_u1 174subroutine vec_cmpgt_test_u1(arg1, arg2) 175 vector(unsigned(1)) :: arg1, arg2 176 vector(unsigned(1)) :: r 177 r = vec_cmpgt(arg1, arg2) 178 179! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 180! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 181! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]]) 182end subroutine vec_cmpgt_test_u1 183 184! CHECK-LABEL: vec_cmpgt_test_u2 185subroutine vec_cmpgt_test_u2(arg1, arg2) 186 vector(unsigned(2)) :: arg1, arg2 187 vector(unsigned(2)) :: r 188 r = vec_cmpgt(arg1, arg2) 189 190! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 191! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 192! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]]) 193end subroutine vec_cmpgt_test_u2 194 195! CHECK-LABEL: vec_cmpgt_test_u4 196subroutine vec_cmpgt_test_u4(arg1, arg2) 197 vector(unsigned(4)) :: arg1, arg2 198 vector(unsigned(4)) :: r 199 r = vec_cmpgt(arg1, arg2) 200 201! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 202! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 203! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]]) 204end subroutine vec_cmpgt_test_u4 205 206! CHECK-LABEL: vec_cmpgt_test_u8 207subroutine vec_cmpgt_test_u8(arg1, arg2) 208 vector(unsigned(8)) :: arg1, arg2 209 vector(unsigned(8)) :: r 210 r = vec_cmpgt(arg1, arg2) 211 212! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 213! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 214! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]]) 215end subroutine vec_cmpgt_test_u8 216 217! CHECK-LABEL: vec_cmpgt_test_r4 218subroutine vec_cmpgt_test_r4(arg1, arg2) 219 vector(real(4)) :: arg1, arg2 220 vector(unsigned(4)) :: r 221 r = vec_cmpgt(arg1, arg2) 222 223! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16 224! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16 225! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %[[arg1]], <4 x float> %[[arg2]]) 226end subroutine vec_cmpgt_test_r4 227 228! CHECK-LABEL: vec_cmpgt_test_r8 229subroutine vec_cmpgt_test_r8(arg1, arg2) 230 vector(real(8)) :: arg1, arg2 231 vector(unsigned(8)) :: r 232 r = vec_cmpgt(arg1, arg2) 233 234! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16 235! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16 236! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %[[arg1]], <2 x double> %[[arg2]]) 237end subroutine vec_cmpgt_test_r8 238 239!---------------------- 240! vec_cmple 241!---------------------- 242 243! CHECK-LABEL: vec_cmple_test_i8 244subroutine vec_cmple_test_i8(arg1, arg2) 245 vector(integer(8)) :: arg1, arg2 246 vector(unsigned(8)) :: r 247 r = vec_cmple(arg1, arg2) 248 249! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 250! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 251! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]]) 252! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1) 253end subroutine vec_cmple_test_i8 254 255! CHECK-LABEL: vec_cmple_test_i4 256subroutine vec_cmple_test_i4(arg1, arg2) 257 vector(integer(4)) :: arg1, arg2 258 vector(unsigned(4)) :: r 259 r = vec_cmple(arg1, arg2) 260 261! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 262! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 263! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]]) 264! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1) 265end subroutine vec_cmple_test_i4 266 267! CHECK-LABEL: vec_cmple_test_i2 268subroutine vec_cmple_test_i2(arg1, arg2) 269 vector(integer(2)) :: arg1, arg2 270 vector(unsigned(2)) :: r 271 r = vec_cmple(arg1, arg2) 272 273! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 274! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 275! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]]) 276! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1) 277end subroutine vec_cmple_test_i2 278 279! CHECK-LABEL: vec_cmple_test_i1 280subroutine vec_cmple_test_i1(arg1, arg2) 281 vector(integer(1)) :: arg1, arg2 282 vector(unsigned(1)) :: r 283 r = vec_cmple(arg1, arg2) 284 285! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 286! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 287! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]]) 288! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1) 289end subroutine vec_cmple_test_i1 290 291! CHECK-LABEL: vec_cmple_test_u8 292subroutine vec_cmple_test_u8(arg1, arg2) 293 vector(unsigned(8)) :: arg1, arg2 294 vector(unsigned(8)) :: r 295 r = vec_cmple(arg1, arg2) 296 297! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 298! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 299! LLVMIR: %[[res:.*]] = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg1]], <2 x i64> %[[arg2]]) 300! LLVMIR: %{{[0-9]+}} = xor <2 x i64> %[[res]], splat (i64 -1) 301end subroutine vec_cmple_test_u8 302 303! CHECK-LABEL: vec_cmple_test_u4 304subroutine vec_cmple_test_u4(arg1, arg2) 305 vector(unsigned(4)) :: arg1, arg2 306 vector(unsigned(4)) :: r 307 r = vec_cmple(arg1, arg2) 308 309! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 310! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 311! LLVMIR: %[[res:.*]] = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg1]], <4 x i32> %[[arg2]]) 312! LLVMIR: %{{[0-9]+}} = xor <4 x i32> %[[res]], splat (i32 -1) 313end subroutine vec_cmple_test_u4 314 315! CHECK-LABEL: vec_cmple_test_u2 316subroutine vec_cmple_test_u2(arg1, arg2) 317 vector(unsigned(2)) :: arg1, arg2 318 vector(unsigned(2)) :: r 319 r = vec_cmple(arg1, arg2) 320 321! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 322! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 323! LLVMIR: %[[res:.*]] = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg1]], <8 x i16> %[[arg2]]) 324! LLVMIR: %{{[0-9]+}} = xor <8 x i16> %[[res]], splat (i16 -1) 325end subroutine vec_cmple_test_u2 326 327! CHECK-LABEL: vec_cmple_test_u1 328subroutine vec_cmple_test_u1(arg1, arg2) 329 vector(unsigned(1)) :: arg1, arg2 330 vector(unsigned(1)) :: r 331 r = vec_cmple(arg1, arg2) 332 333! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 334! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 335! LLVMIR: %[[res:.*]] = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg1]], <16 x i8> %[[arg2]]) 336! LLVMIR: %{{[0-9]+}} = xor <16 x i8> %[[res]], splat (i8 -1) 337end subroutine vec_cmple_test_u1 338 339! CHECK-LABEL: vec_cmple_test_r4 340subroutine vec_cmple_test_r4(arg1, arg2) 341 vector(real(4)) :: arg1, arg2 342 vector(unsigned(4)) :: r 343 r = vec_cmple(arg1, arg2) 344 345! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16 346! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16 347! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgesp(<4 x float> %[[arg2]], <4 x float> %[[arg1]]) 348end subroutine vec_cmple_test_r4 349 350! CHECK-LABEL: vec_cmple_test_r8 351subroutine vec_cmple_test_r8(arg1, arg2) 352 vector(real(8)) :: arg1, arg2 353 vector(unsigned(8)) :: r 354 r = vec_cmple(arg1, arg2) 355 356! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16 357! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16 358! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgedp(<2 x double> %[[arg2]], <2 x double> %[[arg1]]) 359end subroutine vec_cmple_test_r8 360 361!---------------------- 362! vec_cmplt 363!---------------------- 364 365! CHECK-LABEL: vec_cmplt_test_i1 366subroutine vec_cmplt_test_i1(arg1, arg2) 367 vector(integer(1)) :: arg1, arg2 368 vector(unsigned(1)) :: r 369 r = vec_cmplt(arg1, arg2) 370 371! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 372! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 373! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtsb(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]]) 374end subroutine vec_cmplt_test_i1 375 376! CHECK-LABEL: vec_cmplt_test_i2 377subroutine vec_cmplt_test_i2(arg1, arg2) 378 vector(integer(2)) :: arg1, arg2 379 vector(unsigned(2)) :: r 380 r = vec_cmplt(arg1, arg2) 381 382! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 383! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 384! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtsh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]]) 385end subroutine vec_cmplt_test_i2 386 387! CHECK-LABEL: vec_cmplt_test_i4 388subroutine vec_cmplt_test_i4(arg1, arg2) 389 vector(integer(4)) :: arg1, arg2 390 vector(unsigned(4)) :: r 391 r = vec_cmplt(arg1, arg2) 392 393! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 394! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 395! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtsw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]]) 396end subroutine vec_cmplt_test_i4 397 398! CHECK-LABEL: vec_cmplt_test_i8 399subroutine vec_cmplt_test_i8(arg1, arg2) 400 vector(integer(8)) :: arg1, arg2 401 vector(unsigned(8)) :: r 402 r = vec_cmplt(arg1, arg2) 403 404! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 405! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 406! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtsd(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]]) 407end subroutine vec_cmplt_test_i8 408 409! CHECK-LABEL: vec_cmplt_test_u1 410subroutine vec_cmplt_test_u1(arg1, arg2) 411 vector(unsigned(1)) :: arg1, arg2 412 vector(unsigned(1)) :: r 413 r = vec_cmplt(arg1, arg2) 414 415! LLVMIR: %[[arg1:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 416! LLVMIR: %[[arg2:.*]] = load <16 x i8>, ptr %{{.*}}, align 16 417! LLVMIR: %{{[0-9]+}} = call <16 x i8> @llvm.ppc.altivec.vcmpgtub(<16 x i8> %[[arg2]], <16 x i8> %[[arg1]]) 418end subroutine vec_cmplt_test_u1 419 420! CHECK-LABEL: vec_cmplt_test_u2 421subroutine vec_cmplt_test_u2(arg1, arg2) 422 vector(unsigned(2)) :: arg1, arg2 423 vector(unsigned(2)) :: r 424 r = vec_cmplt(arg1, arg2) 425 426! LLVMIR: %[[arg1:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 427! LLVMIR: %[[arg2:.*]] = load <8 x i16>, ptr %{{.*}}, align 16 428! LLVMIR: %{{[0-9]+}} = call <8 x i16> @llvm.ppc.altivec.vcmpgtuh(<8 x i16> %[[arg2]], <8 x i16> %[[arg1]]) 429end subroutine vec_cmplt_test_u2 430 431! CHECK-LABEL: vec_cmplt_test_u4 432subroutine vec_cmplt_test_u4(arg1, arg2) 433 vector(unsigned(4)) :: arg1, arg2 434 vector(unsigned(4)) :: r 435 r = vec_cmplt(arg1, arg2) 436 437! LLVMIR: %[[arg1:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 438! LLVMIR: %[[arg2:.*]] = load <4 x i32>, ptr %{{.*}}, align 16 439! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.altivec.vcmpgtuw(<4 x i32> %[[arg2]], <4 x i32> %[[arg1]]) 440end subroutine vec_cmplt_test_u4 441 442! CHECK-LABEL: vec_cmplt_test_u8 443subroutine vec_cmplt_test_u8(arg1, arg2) 444 vector(unsigned(8)) :: arg1, arg2 445 vector(unsigned(8)) :: r 446 r = vec_cmplt(arg1, arg2) 447 448! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 449! LLVMIR: %[[arg2:.*]] = load <2 x i64>, ptr %{{.*}}, align 16 450! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.altivec.vcmpgtud(<2 x i64> %[[arg2]], <2 x i64> %[[arg1]]) 451end subroutine vec_cmplt_test_u8 452 453! CHECK-LABEL: vec_cmplt_test_r4 454subroutine vec_cmplt_test_r4(arg1, arg2) 455 vector(real(4)) :: arg1, arg2 456 vector(unsigned(4)) :: r 457 r = vec_cmplt(arg1, arg2) 458 459! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{.*}}, align 16 460! LLVMIR: %[[arg2:.*]] = load <4 x float>, ptr %{{.*}}, align 16 461! LLVMIR: %{{[0-9]+}} = call <4 x i32> @llvm.ppc.vsx.xvcmpgtsp(<4 x float> %[[arg2]], <4 x float> %[[arg1]]) 462end subroutine vec_cmplt_test_r4 463 464! CHECK-LABEL: vec_cmplt_test_r8 465subroutine vec_cmplt_test_r8(arg1, arg2) 466 vector(real(8)) :: arg1, arg2 467 vector(unsigned(8)) :: r 468 r = vec_cmplt(arg1, arg2) 469 470! LLVMIR: %[[arg1:.*]] = load <2 x double>, ptr %{{.*}}, align 16 471! LLVMIR: %[[arg2:.*]] = load <2 x double>, ptr %{{.*}}, align 16 472! LLVMIR: %{{[0-9]+}} = call <2 x i64> @llvm.ppc.vsx.xvcmpgtdp(<2 x double> %[[arg2]], <2 x double> %[[arg1]]) 473end subroutine vec_cmplt_test_r8 474 475