brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.1 KiB · 19cfd2c Raw
28 lines · plain
1// Test llvm code generation of fir.coordinate_of with field names2// RUN: fir-opt %s | tco | FileCheck %s3 4 5// CHECK-DAG: %[[a:.*]] = type { float, i32 }6// CHECK-DAG: %[[b:.*]] = type { float, i32 }7// CHECK-DAG: %[[c:.*]] = type { float, %[[b]] }8 9// CHECK-LABEL: @simple_field10// CHECK-SAME: (ptr {{[^%]*}}%[[arg0:.*]])11func.func @simple_field(%arg0: !fir.ref<!fir.type<a{x:f32,i:i32}>>) -> i32 {12  // CHECK: %[[GEP:.*]] = getelementptr %a, ptr %[[arg0]], i32 0, i32 113  %2 = fir.coordinate_of %arg0, i : (!fir.ref<!fir.type<a{x:f32,i:i32}>>) -> !fir.ref<i32>14  // CHECK: load i32, ptr %[[GEP]]15  %3 = fir.load %2 : !fir.ref<i32>16  return %3 : i3217}18 19// CHECK-LABEL: @derived_field20// CHECK-SAME: (ptr {{[^%]*}}%[[arg0:.*]])21func.func @derived_field(%arg0: !fir.ref<!fir.type<c{x:f32,some_b:!fir.type<b{x:f32,i:i32}>}>>) -> i32 {22  // CHECK: %[[GEP:.*]] = getelementptr %c, ptr %[[arg0]], i32 0, i32 1, i32 123  %3 = fir.coordinate_of %arg0, some_b, i : (!fir.ref<!fir.type<c{x:f32,some_b:!fir.type<b{x:f32,i:i32}>}>>) -> !fir.ref<i32>24  // CHECK: load i32, ptr %[[GEP]]25  %4 = fir.load %3 : !fir.ref<i32>26  return %4 : i3227}28