File: field-index.fir

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (30 lines) | stat: -rw-r--r-- 1,311 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// Test fir.field_index llvm code generation
// RUN: fir-opt %s | tco | FileCheck %s


// CHECK-DAG: %[[a:.*]] = type { float, i32 }
// CHECK-DAG: %[[b:.*]] = type { float, i32 }
// CHECK-DAG: %[[c:.*]] = type { float, %[[b]] }

// CHECK-LABEL: @simple_field
// CHECK-SAME: (ptr %[[arg0:.*]])
func.func @simple_field(%arg0: !fir.ref<!fir.type<a{x:f32,i:i32}>>) -> i32 {
  %1 = fir.field_index i, !fir.type<a{x:f32,i:i32}>
  // CHECK: %[[GEP:.*]] = getelementptr %a, ptr %[[arg0]], i32 0, i32 1
  %2 = fir.coordinate_of %arg0, %1 : (!fir.ref<!fir.type<a{x:f32,i:i32}>>, !fir.field) -> !fir.ref<i32>
  // CHECK: load i32, ptr %[[GEP]]
  %3 = fir.load %2 : !fir.ref<i32>
  return %3 : i32
}

// CHECK-LABEL: @derived_field
// CHECK-SAME: (ptr %[[arg0:.*]])
func.func @derived_field(%arg0: !fir.ref<!fir.type<c{x:f32,some_b:!fir.type<b{x:f32,i:i32}>}>>) -> i32 {
  %1 = fir.field_index some_b, !fir.type<c{x:f32,some_b:!fir.type<b{x:f32,i:i32}>}>
  %2 = fir.field_index i, !fir.type<b{x:f32,i:i32}>
  // CHECK: %[[GEP:.*]] = getelementptr %c, ptr %[[arg0]], i32 0, i32 1, i32 1
  %3 = fir.coordinate_of %arg0, %1, %2 : (!fir.ref<!fir.type<c{x:f32,some_b:!fir.type<b{x:f32,i:i32}>}>>, !fir.field, !fir.field) -> !fir.ref<i32>
  // CHECK: load i32, ptr %[[GEP]]
  %4 = fir.load %3 : !fir.ref<i32>
  return %4 : i32
}