CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
109 lines
3.7 KiB
Plaintext
109 lines
3.7 KiB
Plaintext
// RUN: tco %s | FileCheck %s
|
|
|
|
// CHECK-LABEL: define i64 @_QTtP.mem.size(i32 %0, i16 %1)
|
|
func.func @_QTtP.mem.size(%0 : i32, %1 : i16) -> index {
|
|
%2 = call @_QTtP.f1.size(%0, %1) : (i32, i16) -> index
|
|
%3 = call @_QTtP.f2.size(%0, %1) : (i32, i16) -> index
|
|
%4 = arith.addi %2, %3 : index
|
|
// CHECK: ret i64 8
|
|
return %4 : index
|
|
}
|
|
// CHECK-LABEL: define i64 @_QTtP.f1.size(i32 %0, i16 %1)
|
|
func.func @_QTtP.f1.size(%0 : i32, %1 : i16) -> index {
|
|
%2 = arith.constant 4 : index
|
|
// CHECK: ret i64 4
|
|
return %2 : index
|
|
}
|
|
// CHECK-LABEL: define i64 @_QTtP.f2.size(i32 %0, i16 %1)
|
|
func.func @_QTtP.f2.size(%0 : i32, %1 : i16) -> index {
|
|
%2 = arith.constant 4 : index
|
|
// CHECK: ret i64 4
|
|
return %2 : index
|
|
}
|
|
// CHECK-LABEL: define i32 @_QTtP.f1.offset(i32 %0, i16 %1)
|
|
func.func @_QTtP.f1.offset(%0 : i32, %1 : i16) -> i32 {
|
|
%2 = arith.constant 0 : i32
|
|
// CHECK: ret i32 0
|
|
return %2 : i32
|
|
}
|
|
// CHECK-LABEL: define i32 @_QTtP.f2.offset(i32 %0, i16 %1)
|
|
func.func @_QTtP.f2.offset(%0 : i32, %1 : i16) -> i32 {
|
|
%2 = arith.constant 4 : i32
|
|
// CHECK: ret i32 4
|
|
return %2 : i32
|
|
}
|
|
|
|
// program p
|
|
// type t(p1,p2)
|
|
// integer, len :: p1
|
|
// integer(kind=2), len :: p2
|
|
// integer f1
|
|
// real f2
|
|
// end type t
|
|
// type(t) var
|
|
// var%f1 = 4
|
|
// end program p
|
|
|
|
// CHECK-LABEL: define void @_QQmain(i32 %0, i16 %1)
|
|
func.func @_QQmain(%arg0 : i32, %arg1 : i16) {
|
|
// CHECK: %[[size:.*]] = call i64 @_QTtP.mem.size(i32 %0, i16 %1)
|
|
// CHECK: %[[alloc:.*]] = alloca i8, i64 %[[size]]
|
|
%0 = fir.alloca !fir.type<_QTt(p1:i32,p2:i16){f1:i32,f2:f32}>(%arg0, %arg1 : i32, i16) {name = "_QEvar"}
|
|
%2 = fir.coordinate_of %0, f1 : (!fir.ref<!fir.type<_QTt(p1:i32,p2:i16){f1:i32,f2:f32}>>) -> !fir.ref<i32>
|
|
%c4_i32 = arith.constant 4 : i32
|
|
fir.store %c4_i32 to %2 : !fir.ref<i32>
|
|
return
|
|
}
|
|
|
|
// CHECK-LABEL: define i64 @_QTt1P.mem.size(i32 %0, i32 %1)
|
|
func.func @_QTt1P.mem.size(%0 : i32, %1 : i32) -> index {
|
|
// CHECK: call i64 @_QTt1P.f1.size
|
|
%2 = call @_QTt1P.f1.size(%0, %1) : (i32, i32) -> index
|
|
// CHECK: call i64 @_QTt1P.f2.size
|
|
%3 = call @_QTt1P.f2.size(%0, %1) : (i32, i32) -> index
|
|
%4 = arith.addi %2, %3 : index
|
|
return %4 : index
|
|
}
|
|
// CHECK-LABEL: define i64 @_QTt1P.f1.size(i32 %0, i32 %1)
|
|
func.func @_QTt1P.f1.size(%0 : i32, %1 : i32) -> index {
|
|
%2 = fir.convert %0 : (i32) -> index
|
|
return %2 : index
|
|
}
|
|
// CHECK-LABEL: define i64 @_QTt1P.f2.size(i32 %0, i32 %1)
|
|
func.func @_QTt1P.f2.size(%0 : i32, %1 : i32) -> index {
|
|
%2 = fir.convert %1 : (i32) -> index
|
|
return %2 : index
|
|
}
|
|
// CHECK-LABEL: define i32 @_QTt1P.f1.offset(i32 %0, i32 %1)
|
|
func.func @_QTt1P.f1.offset(%0 : i32, %1 : i32) -> i32 {
|
|
%2 = arith.constant 0 : i32
|
|
return %2 : i32
|
|
}
|
|
// CHECK-LABEL: define i32 @_QTt1P.f2.offset(i32 %0, i32 %1)
|
|
func.func @_QTt1P.f2.offset(%0 : i32, %1 : i32) -> i32 {
|
|
return %0 : i32
|
|
}
|
|
// subroutine foo(i,j)
|
|
// type t(p1,p2)
|
|
// integer, len :: p1
|
|
// integer, len :: p2
|
|
// character(LEN=p1) :: f1
|
|
// character(LEN=p2) :: f2
|
|
// end type t
|
|
// type(t(i,j)) var
|
|
// call bar(var%f2)
|
|
// end program p
|
|
|
|
func.func private @bar(!fir.ref<!fir.char<1,?>>)
|
|
func.func private @__use_t1(!fir.ref<!fir.type<_QTt1(p1:i32,p2:i32){f1:!fir.char<1,?>,f2:!fir.char<1,?>}>>) -> ()
|
|
|
|
// CHECK-LABEL: define void @_QPfoo(i32 %0, i32 %1)
|
|
func.func @_QPfoo(%arg0 : i32, %arg1 : i32) {
|
|
// CHECK: %[[size:.*]] = call i64 @_QTt1P.mem.size(i32 %0, i32 %1)
|
|
// CHECK: %[[alloc:.*]] = alloca i8, i64 %[[size]]
|
|
%0 = fir.alloca !fir.type<_QTt1(p1:i32,p2:i32){f1:!fir.char<1,?>,f2:!fir.char<1,?>}>(%arg0, %arg1 : i32, i32)
|
|
// Keep alloca live without creating an unsupported coordinate_of on dynamic-sized field.
|
|
func.call @__use_t1(%0) : (!fir.ref<!fir.type<_QTt1(p1:i32,p2:i32){f1:!fir.char<1,?>,f2:!fir.char<1,?>}>>) -> ()
|
|
return
|
|
}
|