brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · 9af92a4 Raw
50 lines · plain
1// Test fir.box_offset code generation.2// RUN: tco %s | FileCheck %s3// RUN: %flang_fc1 -emit-llvm %s -o - | FileCheck %s4 5func.func @scalar_addr(%scalar : !fir.ref<!fir.box<!fir.type<t>>>) -> !fir.llvm_ptr<!fir.ref<!fir.type<t>>> {6  %addr = fir.box_offset %scalar base_addr : (!fir.ref<!fir.box<!fir.type<t>>>) -> !fir.llvm_ptr<!fir.ref<!fir.type<t>>>7  return %addr : !fir.llvm_ptr<!fir.ref<!fir.type<t>>>8}9// CHECK-LABEL: define ptr @scalar_addr(10// CHECK-SAME: ptr {{[^%]*}}%[[BOX:.*]]){{.*}}{11// CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 012// CHECK:    ret ptr %[[VAL_0]]13 14func.func @scalar_tdesc(%scalar : !fir.ref<!fir.box<!fir.type<t>>>) -> !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>> {15  %tdesc = fir.box_offset %scalar derived_type : (!fir.ref<!fir.box<!fir.type<t>>>) -> !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>>16  return %tdesc : !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>>17}18// CHECK-LABEL: define ptr @scalar_tdesc(19// CHECK-SAME: ptr {{[^%]*}}%[[BOX:.*]]){{.*}}{20// CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 721// CHECK:    ret ptr %[[VAL_0]]22 23func.func @array_addr(%array : !fir.ref<!fir.class<!fir.ptr<!fir.array<?x!fir.type<t>>>>>) -> !fir.llvm_ptr<!fir.ptr<!fir.array<?x!fir.type<t>>>> {24  %addr = fir.box_offset %array base_addr : (!fir.ref<!fir.class<!fir.ptr<!fir.array<?x!fir.type<t>>>>>) -> !fir.llvm_ptr<!fir.ptr<!fir.array<?x!fir.type<t>>>>25  return %addr : !fir.llvm_ptr<!fir.ptr<!fir.array<?x!fir.type<t>>>>26}27// CHECK-LABEL: define ptr @array_addr(28// CHECK-SAME: ptr {{[^%]*}}%[[BOX:.*]]){{.*}}{29// CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]], ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 030// CHECK:    ret ptr %[[VAL_0]]31 32func.func @array_tdesc(%array : !fir.ref<!fir.class<!fir.ptr<!fir.array<?x!fir.type<t>>>>>) -> !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>> {33  %tdesc = fir.box_offset %array derived_type : (!fir.ref<!fir.class<!fir.ptr<!fir.array<?x!fir.type<t>>>>>) -> !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>>34  return %tdesc : !fir.llvm_ptr<!fir.tdesc<!fir.type<t>>>35}36// CHECK-LABEL: define ptr @array_tdesc(37// CHECK-SAME: ptr {{[^%]*}}%[[BOX:.*]]){{.*}}{38// CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, [1 x [3 x i64]], ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 839// CHECK:    ret ptr %[[VAL_0]]40 41func.func @boxchar_addr(%boxchar : !fir.ref<!fir.boxchar<1>>) -> !fir.llvm_ptr<!fir.ref<!fir.char<1,?>>> {42  %addr = fir.box_offset %boxchar base_addr : (!fir.ref<!fir.boxchar<1>>) -> !fir.llvm_ptr<!fir.ref<!fir.char<1,?>>>43  return %addr : !fir.llvm_ptr<!fir.ref<!fir.char<1,?>>>44}45 46// CHECK-LABEL: define ptr @boxchar_addr(47// CHECK-SAME: ptr {{.*}}%[[BOXCHAR:.*]]){{.*}} {48// CHECK: %[[VAL_0:.*]] = getelementptr { ptr, i64 }, ptr %[[BOXCHAR]], i32 0, i32 049// CHECK: ret ptr %[[VAL_0]]50