brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · d1e12a8 Raw
39 lines · plain
1! RUN: bbc -hlfir=false %s -o - | tco | FileCheck %s2! RUN: %flang -emit-llvm -flang-deprecated-no-hlfir -S -mmlir -disable-external-name-interop %s -o - | FileCheck %s3! Test from Fortran source through to LLVM IR.4! UNSUPPORTED: system-windows5! Disabled on 32-bit targets due to the additional `trunc` opcodes required6! UNSUPPORTED: target-x867! UNSUPPORTED: target=sparc-{{.*}}8! UNSUPPORTED: target=sparcel-{{.*}}9 10! Assumed size array of assumed length character.11program test12  character :: x(3) = (/ '1','2','3' /)13  call sub(x)14contains15  subroutine sub(x)16    character(*) x(:)17    forall (i=1:2)18       x(i:i)(1:1) = x(i+1:i+1)(1:1)19    end forall20    print *,x21  end subroutine sub22end program test23 24! CHECK-LABEL: define internal void @_QFPsub(25! CHECK-SAME:    ptr {{[^%]*}}%[[arg:.*]])26! CHECK: %[[extent:.*]] = getelementptr { {{.*}}, [1 x [3 x i64]] }, ptr %[[arg]], i32 0, i32 7, i64 0, i32 127! CHECK: %[[extval:.*]] = load i64, ptr %[[extent]]28! CHECK: %[[elesize:.*]] = getelementptr { {{.*}}, [1 x [3 x i64]] }, ptr %[[arg]], i32 0, i32 129! CHECK: %[[esval:.*]] = load i64, ptr %[[elesize]]30! CHECK: %[[mul:.*]] = mul i64 1, %[[esval]]31! CHECK: %[[mul2:.*]] = mul i64 %[[mul]], %[[extval]]32! CHECK: %[[cmp:.*]] = icmp sgt i64 %[[mul2]], 033! CHECK: %[[size:.*]] = select i1 %[[cmp]], i64 %[[mul2]], i64 134! CHECK: %[[buff:.*]] = call ptr @malloc(i64 %[[size]])35! CHECK: %[[to:.*]] = getelementptr i8, ptr %[[buff]], i64 %36! CHECK: call void @llvm.memmove.p0.p0.i64(ptr %[[to]], ptr %{{.*}}, i64 %{{.*}}, i1 false)37! CHECK: call void @free(ptr %[[buff]])38! CHECK: call ptr @_FortranAioBeginExternalListOutput39