Skip to content

Commit 405ed86

Browse files
committed
[CIR][NFC] Add one more test to ternary.cir
1 parent 8cbac1a commit 405ed86

File tree

1 file changed

+65
-1
lines changed

1 file changed

+65
-1
lines changed

clang/test/CIR/Lowering/ternary.cir

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// RUN: FileCheck %s --input-file=%t.cir -check-prefix=MLIR
33

44
!s32i = !cir.int<s, 32>
5+
!rec_A = !cir.record<union "A" {!s32i}>
6+
!rec_anon2E0 = !cir.record<union "anon.0" {!rec_A} #cir.record.decl.ast>
57

68
module {
79
cir.func @_Z1xi(%arg0: !s32i) -> !s32i {
@@ -22,7 +24,6 @@ cir.func @_Z1xi(%arg0: !s32i) -> !s32i {
2224
%6 = cir.load %1 : !cir.ptr<!s32i>, !s32i
2325
cir.return %6 : !s32i
2426
}
25-
}
2627

2728
// MLIR: llvm.func @_Z1xi(%arg0: i32) -> i32
2829
// MLIR-NEXT: %0 = llvm.mlir.constant(1 : index) : i64
@@ -45,3 +46,66 @@ cir.func @_Z1xi(%arg0: !s32i) -> !s32i {
4546
// MLIR-NEXT: %10 = llvm.load %3 {alignment = 4 : i64} : !llvm.ptr -> i32
4647
// MLIR-NEXT: llvm.return %10 : i32
4748
// MLIR-NEXT: }
49+
50+
cir.global external dso_local @a = #cir.zero : !cir.array<!rec_anon2E0 x 1> {alignment = 4 : i64}
51+
cir.func no_proto dso_local @B() -> !rec_A {
52+
%0 = cir.alloca !rec_A, !cir.ptr<!rec_A>, ["__retval"] {alignment = 4 : i64}
53+
%1 = cir.get_global @a : !cir.ptr<!cir.array<!rec_anon2E0 x 1>>
54+
%2 = cir.cast bitcast %1 : !cir.ptr<!cir.array<!rec_anon2E0 x 1>> -> !cir.ptr<!cir.array<!rec_anon2E0 x 0>>
55+
%3 = cir.get_global @a : !cir.ptr<!cir.array<!rec_anon2E0 x 1>>
56+
%4 = cir.cast bitcast %3 : !cir.ptr<!cir.array<!rec_anon2E0 x 1>> -> !cir.ptr<!cir.array<!rec_anon2E0 x 0>>
57+
%5 = cir.cast array_to_ptrdecay %4 : !cir.ptr<!cir.array<!rec_anon2E0 x 0>> -> !cir.ptr<!rec_anon2E0>
58+
%6 = cir.const #cir.ptr<null> : !cir.ptr<!rec_anon2E0>
59+
%7 = cir.cmp(lt, %5, %6) : !cir.ptr<!rec_anon2E0>, !cir.bool
60+
%8 = cir.cast bool_to_int %7 : !cir.bool -> !s32i
61+
%9 = cir.ternary(%7, true {
62+
cir.yield %8 : !s32i
63+
}, false {
64+
%14 = cir.get_global @a : !cir.ptr<!cir.array<!rec_anon2E0 x 1>>
65+
%15 = cir.cast bitcast %14 : !cir.ptr<!cir.array<!rec_anon2E0 x 1>> -> !cir.ptr<!cir.array<!rec_anon2E0 x 0>>
66+
%16 = cir.const #cir.int<0> : !s32i
67+
%17 = cir.get_element %15[%16] : (!cir.ptr<!cir.array<!rec_anon2E0 x 0>>, !s32i) -> !cir.ptr<!rec_anon2E0>
68+
%18 = cir.get_member %17[0] {name = "B"} : !cir.ptr<!rec_anon2E0> -> !cir.ptr<!rec_A>
69+
%19 = cir.get_member %18[0] {name = "A"} : !cir.ptr<!rec_A> -> !cir.ptr<!s32i>
70+
%20 = cir.load align(4) %19 : !cir.ptr<!s32i>, !s32i
71+
cir.yield %20 : !s32i
72+
}) : (!cir.bool) -> !s32i
73+
%10 = cir.const #cir.int<0> : !s32i
74+
%11 = cir.binop(sub, %9, %10) nsw : !s32i
75+
%12 = cir.get_element %2[%11] : (!cir.ptr<!cir.array<!rec_anon2E0 x 0>>, !s32i) -> !cir.ptr<!rec_anon2E0>
76+
%13 = cir.load %0 : !cir.ptr<!rec_A>, !rec_A
77+
cir.return %13 : !rec_A
78+
}
79+
// MLIR-LABEL: llvm.func @B() -> !llvm.struct<"union.A", (i32)>
80+
// MLIR: %[[VAL_0:.*]] = llvm.mlir.constant(1 : index) : i64
81+
// MLIR: %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x !llvm.struct<"union.A", (i32)> {alignment = 4 : i64} : (i64) -> !llvm.ptr
82+
// MLIR: %[[VAL_2:.*]] = llvm.mlir.addressof @a : !llvm.ptr
83+
// MLIR: %[[VAL_3:.*]] = llvm.bitcast %[[VAL_2]] : !llvm.ptr to !llvm.ptr
84+
// MLIR: %[[VAL_4:.*]] = llvm.mlir.addressof @a : !llvm.ptr
85+
// MLIR: %[[VAL_5:.*]] = llvm.bitcast %[[VAL_4]] : !llvm.ptr to !llvm.ptr
86+
// MLIR: %[[VAL_6:.*]] = llvm.getelementptr %[[VAL_5]][0] : (!llvm.ptr) -> !llvm.ptr, !llvm.struct<"union.anon.0", (struct<"union.A", (i32)>)>
87+
// MLIR: %[[VAL_7:.*]] = llvm.mlir.zero : !llvm.ptr
88+
// MLIR: %[[VAL_8:.*]] = llvm.icmp "ult" %[[VAL_6]], %[[VAL_7]] : !llvm.ptr
89+
// MLIR: %[[VAL_9:.*]] = llvm.zext %[[VAL_8]] : i1 to i32
90+
// MLIR: llvm.cond_br %[[VAL_8]], ^bb1, ^bb2
91+
// MLIR: ^bb1:
92+
// MLIR: llvm.br ^bb3(%[[VAL_9]] : i32)
93+
// MLIR: ^bb2:
94+
// MLIR: %[[VAL_10:.*]] = llvm.mlir.addressof @a : !llvm.ptr
95+
// MLIR: %[[VAL_11:.*]] = llvm.bitcast %[[VAL_10]] : !llvm.ptr to !llvm.ptr
96+
// MLIR: %[[VAL_12:.*]] = llvm.mlir.constant(0 : i32) : i32
97+
// MLIR: %[[VAL_13:.*]] = llvm.sext %[[VAL_12]] : i32 to i64
98+
// MLIR: %[[VAL_14:.*]] = llvm.getelementptr %[[VAL_11]][0, %[[VAL_13]]] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.array<0 x struct<"union.anon.0", (struct<"union.A", (i32)>)>>
99+
// MLIR: %[[VAL_15:.*]] = llvm.bitcast %[[VAL_14]] : !llvm.ptr to !llvm.ptr
100+
// MLIR: %[[VAL_16:.*]] = llvm.bitcast %[[VAL_15]] : !llvm.ptr to !llvm.ptr
101+
// MLIR: %[[VAL_17:.*]] = llvm.load %[[VAL_16]] {alignment = 4 : i64} : !llvm.ptr -> i32
102+
// MLIR: llvm.br ^bb3(%[[VAL_17]] : i32)
103+
// MLIR: ^bb3(%[[VAL_18:.*]]: i32):
104+
// MLIR: %[[VAL_19:.*]] = llvm.mlir.constant(0 : i32) : i32
105+
// MLIR: %[[VAL_20:.*]] = llvm.sub %[[VAL_18]], %[[VAL_19]] overflow<nsw> : i32
106+
// MLIR: %[[VAL_21:.*]] = llvm.sext %[[VAL_20]] : i32 to i64
107+
// MLIR: %[[VAL_22:.*]] = llvm.getelementptr %[[VAL_3]][0, %[[VAL_21]]] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.array<0 x struct<"union.anon.0", (struct<"union.A", (i32)>)>>
108+
// MLIR: %[[VAL_23:.*]] = llvm.load %[[VAL_1]] {alignment = 4 : i64} : !llvm.ptr -> !llvm.struct<"union.A", (i32)>
109+
// MLIR: llvm.return %[[VAL_23]] : !llvm.struct<"union.A", (i32)>
110+
// MLIR: }
111+
}

0 commit comments

Comments
 (0)