33 lines
1.3 KiB
Fortran
33 lines
1.3 KiB
Fortran
|
! RUN: %flang_fc1 -flang-experimental-hlfir -emit-llvm %s -fno-ppc-native-vector-element-order -triple ppc64le-unknown-linux -o - | FileCheck --check-prefixes="LLVMIR" %s
|
||
|
! REQUIRES: target=powerpc{{.*}}
|
||
|
|
||
|
!CHECK-LABEL: vec_extract_testr4i8
|
||
|
subroutine vec_extract_testr4i8(arg1, arg2, r)
|
||
|
vector(real(4)) :: arg1
|
||
|
real(4) :: r
|
||
|
integer(8) :: arg2
|
||
|
r = vec_extract(arg1, arg2)
|
||
|
|
||
|
! LLVMIR: %[[arg1:.*]] = load <4 x float>, ptr %{{[0-9]}}, align 16
|
||
|
! LLVMIR: %[[arg2:.*]] = load i64, ptr %{{[0-9]}}, align 8
|
||
|
! LLVMIR: %[[urem:.*]] = urem i64 %[[arg2]], 4
|
||
|
! LLVMIR: %[[sub:.*]] = sub i64 3, %[[urem]]
|
||
|
! LLVMIR: %[[r:.*]] = extractelement <4 x float> %[[arg1]], i64 %[[sub]]
|
||
|
! LLVMIR: store float %[[r]], ptr %{{[0-9]}}, align 4
|
||
|
end subroutine vec_extract_testr4i8
|
||
|
|
||
|
!CHECK-LABEL: vec_extract_testi8i1
|
||
|
subroutine vec_extract_testi8i1(arg1, arg2, r)
|
||
|
vector(integer(8)) :: arg1
|
||
|
integer(8) :: r
|
||
|
integer(1) :: arg2
|
||
|
r = vec_extract(arg1, arg2)
|
||
|
|
||
|
! LLVMIR: %[[arg1:.*]] = load <2 x i64>, ptr %{{[0-9]}}, align 16
|
||
|
! LLVMIR: %[[arg2:.*]] = load i8, ptr %{{[0-9]}}, align 1
|
||
|
! LLVMIR: %[[urem:.*]] = urem i8 %[[arg2]], 2
|
||
|
! LLVMIR: %[[sub:.*]] = sub i8 1, %[[urem]]
|
||
|
! LLVMIR: %[[r:.*]] = extractelement <2 x i64> %[[arg1]], i8 %[[sub]]
|
||
|
! LLVMIR: store i64 %[[r]], ptr %{{[0-9]}}, align 8
|
||
|
end subroutine vec_extract_testi8i1
|