mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-26 19:36:28 +00:00
[Flang] Lower achar intrinsic
The intrinsic returns the character located at the position requested in the ASCII sequence. The intrinsic is lowered to inline FIR code. This is part of the upstreaming effort from the fir-dev branch in [1]. [1] https://github.com/flang-compiler/f18-llvm-project Reviewed By: clementval Differential Revision: https://reviews.llvm.org/D122480 Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
This commit is contained in:
parent
be9acee059
commit
7babc8e6cd
@ -648,6 +648,7 @@ static constexpr bool handleDynamicOptional = true;
|
||||
/// should be provided for all the intrinsic arguments for completeness.
|
||||
static constexpr IntrinsicHandler handlers[]{
|
||||
{"abs", &I::genAbs},
|
||||
{"achar", &I::genChar},
|
||||
{"adjustl",
|
||||
&I::genAdjustRtCall<fir::runtime::genAdjustL>,
|
||||
{{{"string", asAddr}}},
|
||||
|
23
flang/test/Lower/Intrinsics/achar.f90
Normal file
23
flang/test/Lower/Intrinsics/achar.f90
Normal file
@ -0,0 +1,23 @@
|
||||
! RUN: bbc -emit-fir %s -o - | fir-opt --canonicalize | FileCheck %s
|
||||
! RUN: %flang_fc1 -emit-fir %s -o - | fir-opt --canonicalize | FileCheck %s
|
||||
|
||||
! CHECK-LABEL: test1
|
||||
! CHECK-SAME: (%[[XREF:.*]]: !fir.ref<i32> {{.*}}, %[[CBOX:.*]]: !fir.boxchar<1> {{.*}})
|
||||
! CHECK: %[[C1:.*]] = arith.constant 1 : index
|
||||
! CHECK: %[[FALSE:.*]] = arith.constant false
|
||||
! CHECK: %[[TEMP:.*]] = fir.alloca !fir.char<1> {adapt.valuebyref}
|
||||
! CHECK: %[[C:.*]]:2 = fir.unboxchar %[[CBOX]] : (!fir.boxchar<1>) -> (!fir.ref<!fir.char<1,?>>, index)
|
||||
! CHECK: %[[X:.*]] = fir.load %[[XREF]] : !fir.ref<i32>
|
||||
! CHECK: %[[X_I8:.*]] = fir.convert %[[X]] : (i32) -> i8
|
||||
! CHECK: %[[UNDEF:.*]] = fir.undefined !fir.char<1>
|
||||
! CHECK: %[[XCHAR:.*]] = fir.insert_value %[[UNDEF]], %[[X_I8]], [0 : index] : (!fir.char<1>, i8) -> !fir.char<1>
|
||||
! CHECK: fir.store %[[XCHAR]] to %[[TEMP]] : !fir.ref<!fir.char<1>>
|
||||
! CHECK: %[[C1_I64:.*]] = fir.convert %[[C1]] : (index) -> i64
|
||||
! CHECK: %[[C_CVT:.*]] = fir.convert %[[C]]#0 : (!fir.ref<!fir.char<1,?>>) -> !fir.ref<i8>
|
||||
! CHECK: %[[TEMP_WITH_XCHAR:.*]] = fir.convert %[[TEMP]] : (!fir.ref<!fir.char<1>>) -> !fir.ref<i8>
|
||||
! CHECK: fir.call @llvm.memmove.p0i8.p0i8.i64(%[[C_CVT]], %[[TEMP_WITH_XCHAR]], %[[C1_I64]], %[[FALSE]]) : (!fir.ref<i8>, !fir.ref<i8>, i64, i1) -> ()
|
||||
subroutine test1(x, c)
|
||||
integer :: x
|
||||
character :: c
|
||||
c = achar(x)
|
||||
end subroutine
|
Loading…
x
Reference in New Issue
Block a user