[RISCV][VLOPT] Add vector narrowing integer right shift instructions to isSupportedIn...
[llvm-project.git] / flang / test / Fir / box-offset-codegen.fir
blob5be3ad1f3eeedeb3a228695af0c9fe68ba87250e
1 // Test fir.box_offset code generation.
2 // RUN: tco %s | FileCheck %s
3 // RUN: %flang_fc1 -emit-llvm %s -o - | FileCheck %s
5 func.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>>>
9 // CHECK-LABEL: define ptr @scalar_addr(
10 // CHECK-SAME: ptr nocapture %[[BOX:.*]]){{.*}}{
11 // CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 0
12 // CHECK:    ret ptr %[[VAL_0]]
14 func.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>>>
18 // CHECK-LABEL: define ptr @scalar_tdesc(
19 // CHECK-SAME: ptr nocapture %[[BOX:.*]]){{.*}}{
20 // CHECK:    %[[VAL_0:.*]] = getelementptr { ptr, i64, i32, i8, i8, i8, i8, ptr, [1 x i64] }, ptr %[[BOX]], i32 0, i32 7
21 // CHECK:    ret ptr %[[VAL_0]]
23 func.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>>>>
27 // CHECK-LABEL: define ptr @array_addr(
28 // CHECK-SAME: ptr nocapture %[[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 0
30 // CHECK:    ret ptr %[[VAL_0]]
32 func.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>>>
36 // CHECK-LABEL: define ptr @array_tdesc(
37 // CHECK-SAME: ptr nocapture %[[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 8
39 // CHECK:    ret ptr %[[VAL_0]]