brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 2e011fb Raw
80 lines · plain
1// RUN: cir-opt %s --verify-roundtrip | FileCheck %s2 3!u8i = !cir.int<u, 8>4!u16i = !cir.int<u, 16>5!s32i = !cir.int<s, 32>6!u32i = !cir.int<u, 32>7 8!rec_C = !cir.record<class "C" incomplete>9!rec_S = !cir.record<struct "S" incomplete>10!rec_U = !cir.record<union "U" incomplete>11 12// CHECK-DAG: !rec_C = !cir.record<class "C" incomplete>13// CHECK-DAG: !rec_S = !cir.record<struct "S" incomplete>14// CHECK-DAG: !rec_U = !cir.record<union "U" incomplete>15 16!rec_anon_struct = !cir.record<struct  packed {!s32i, !s32i, !cir.array<!s32i x 8>}>17!rec_anon_struct1 = !cir.record<struct {!cir.array<!cir.ptr<!u8i> x 5>}>18!rec_anon_struct2 = !cir.record<struct {!cir.ptr<!u8i>, !cir.ptr<!u8i>, !cir.ptr<!u8i>}>19!rec_S1 = !cir.record<struct "S1" {!s32i, !s32i}>20!rec_Sc = !cir.record<struct "Sc" {!u8i, !u16i, !u32i}>21 22// CHECK-DAG: !cir.record<struct {!cir.array<!cir.ptr<!u8i> x 5>}>23// CHECK-DAG: !cir.record<struct {!cir.ptr<!u8i>, !cir.ptr<!u8i>, !cir.ptr<!u8i>}>24// CHECK-DAG: !rec_S1 = !cir.record<struct "S1" {!s32i, !s32i}>25// CHECK-DAG: !rec_Sc = !cir.record<struct "Sc" {!u8i, !u16i, !u32i}>26 27// Packed and padded structs28!rec_P1 = !cir.record<struct "P1" packed {!s32i, !s32i}>29!rec_P2 = !cir.record<struct "P2" padded {!u8i, !u16i, !u32i}>30!rec_P3 = !cir.record<struct "P3" packed padded {!u8i, !u16i, !u32i}>31 32// CHECK-DAG: !rec_P1 = !cir.record<struct "P1" packed {!s32i, !s32i}>33// CHECK-DAG: !rec_P2 = !cir.record<struct "P2" padded {!u8i, !u16i, !u32i}>34// CHECK-DAG: !rec_P3 = !cir.record<struct "P3" packed padded {!u8i, !u16i, !u32i}>35 36 37// Complete a previously incomplete record38!rec_A = !cir.record<class "A" incomplete>39!rec_Ac = !cir.record<class "A" {!u8i, !s32i}>40// CHECK-DAG: !rec_A = !cir.record<class "A" {!u8i, !s32i}>41 42// Test recursive struct parsing/printing.43!rec_Node = !cir.record<struct "Node" {!cir.ptr<!cir.record<struct "Node">>}>44// CHECK-DAG: !cir.record<struct "Node" {!cir.ptr<!cir.record<struct "Node">>}>45 46 47 48module  {49  cir.global external @p1 = #cir.ptr<null> : !cir.ptr<!rec_S>50  cir.global external @p2 = #cir.ptr<null> : !cir.ptr<!rec_U>51  cir.global external @p3 = #cir.ptr<null> : !cir.ptr<!rec_C>52  cir.global external @arr = #cir.const_record<{#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.zero : !cir.array<!s32i x 8>}> : !rec_anon_struct53// CHECK: cir.global external @p1 = #cir.ptr<null> : !cir.ptr<!rec_S>54// CHECK: cir.global external @p2 = #cir.ptr<null> : !cir.ptr<!rec_U>55// CHECK: cir.global external @p3 = #cir.ptr<null> : !cir.ptr<!rec_C>56// CHECK: cir.global external @arr = #cir.const_record<{#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.zero : !cir.array<!s32i x 8>}> : !rec_anon_struct57 58  // Dummy function to use types and force them to be printed.59  cir.func @useTypes(%arg0: !rec_Node,60                     %arg1: !rec_anon_struct2,61                     %arg2: !rec_anon_struct1,62                     %arg3: !rec_S1,63                     %arg4: !rec_Ac,64                     %arg5: !rec_P1,65                     %arg6: !rec_P2,66                     %arg7: !rec_P3) {67    cir.return68  }69 70  cir.func @structs() {71    %0 = cir.alloca !cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>, !cir.ptr<!cir.ptr<!cir.record<struct "Sc" {!u8i, !u16i, !u32i}>>>, ["sc", init]72    %1 = cir.alloca !cir.ptr<!cir.record<union "U" incomplete>>, !cir.ptr<!cir.ptr<!cir.record<union "U" incomplete>>>, ["u", init]73    cir.return74  }75 76// CHECK: cir.func @structs() {77// CHECK:     %0 = cir.alloca !cir.ptr<!rec_Sc>, !cir.ptr<!cir.ptr<!rec_Sc>>, ["sc", init]78// CHECK:     %1 = cir.alloca !cir.ptr<!rec_U>, !cir.ptr<!cir.ptr<!rec_U>>, ["u", init]79}80