Skip to content

Commit f470023

Browse files
Updated test with pattern matching and removed caseEltValueListAttr variable
1 parent 906e697 commit f470023

File tree

2 files changed

+68
-66
lines changed

2 files changed

+68
-66
lines changed

clang/lib/CIR/CodeGen/CIRGenStmt.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -518,20 +518,15 @@ mlir::LogicalResult CIRGenFunction::emitCaseStmt(const CaseStmt &s,
518518
bool buildingTopLevelCase) {
519519
cir::CaseOpKind kind;
520520
mlir::ArrayAttr value;
521-
522-
SmallVector<mlir::Attribute, 1> caseEltValueListAttr;
523521
llvm::APSInt intVal = s.getLHS()->EvaluateKnownConstInt(getContext());
524522

525523
// If the case statement has an RHS value, it is representing a GNU
526524
// case range statement, where LHS is the beginning of the range
527525
// and RHS is the end of the range.
528526
if (const Expr *rhs = s.getRHS()) {
529-
530527
llvm::APSInt endVal = rhs->EvaluateKnownConstInt(getContext());
531-
SmallVector<mlir::Attribute, 4> rangeCaseAttr = {
532-
cir::IntAttr::get(condType, intVal),
533-
cir::IntAttr::get(condType, endVal)};
534-
value = builder.getArrayAttr(rangeCaseAttr);
528+
value = builder.getArrayAttr({cir::IntAttr::get(condType, intVal),
529+
cir::IntAttr::get(condType, endVal)});
535530
kind = cir::CaseOpKind::Range;
536531

537532
// We don't currently fold case range statements with other case statements.
@@ -540,8 +535,7 @@ mlir::LogicalResult CIRGenFunction::emitCaseStmt(const CaseStmt &s,
540535
assert(!cir::MissingFeatures::foldRangeCase());
541536
assert(!cir::MissingFeatures::foldCascadingCases());
542537
} else {
543-
caseEltValueListAttr.push_back(cir::IntAttr::get(condType, intVal));
544-
value = builder.getArrayAttr(caseEltValueListAttr);
538+
value = builder.getArrayAttr({cir::IntAttr::get(condType, intVal)});
545539
kind = cir::CaseOpKind::Equal;
546540
}
547541

clang/test/CIR/CodeGen/switch.cpp

Lines changed: 65 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ void sw1(int a) {
1818
}
1919

2020
// CIR: cir.func @_Z3sw1i
21-
// CIR: cir.switch (%3 : !s32i) {
21+
// CIR: cir.switch (%[[COND:.*]] : !s32i) {
2222
// CIR-NEXT: cir.case(equal, [#cir.int<0> : !s32i]) {
2323
// CIR: cir.break
2424
// CIR: cir.case(equal, [#cir.int<1> : !s32i]) {
@@ -67,12 +67,12 @@ void sw2(int a) {
6767

6868
// CIR: cir.func @_Z3sw2i
6969
// CIR: cir.scope {
70-
// CIR-NEXT: %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["yolo", init]
71-
// CIR-NEXT: %2 = cir.alloca !s32i, !cir.ptr<!s32i>, ["fomo", init]
72-
// CIR: cir.switch (%4 : !s32i) {
70+
// CIR-NEXT: %[[YOLO:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["yolo", init]
71+
// CIR-NEXT: %[[FOMO:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["fomo", init]
72+
// CIR: cir.switch (%[[COND:.*]] : !s32i) {
7373
// CIR-NEXT: cir.case(equal, [#cir.int<3> : !s32i]) {
74-
// CIR-NEXT: %5 = cir.const #cir.int<0> : !s32i
75-
// CIR-NEXT: cir.store %5, %2 : !s32i, !cir.ptr<!s32i>
74+
// CIR-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i
75+
// CIR-NEXT: cir.store %[[ZERO]], %[[FOMO]] : !s32i, !cir.ptr<!s32i>
7676

7777
// OGCG: define dso_local void @_Z3sw2i
7878
// OGCG: entry:
@@ -101,8 +101,8 @@ void sw3(int a) {
101101

102102
// CIR: cir.func @_Z3sw3i
103103
// CIR: cir.scope {
104-
// CIR-NEXT: %1 = cir.load %0 : !cir.ptr<!s32i>, !s32i
105-
// CIR-NEXT: cir.switch (%1 : !s32i) {
104+
// CIR-NEXT: %[[COND:.*]] = cir.load %[[A:.*]] : !cir.ptr<!s32i>, !s32i
105+
// CIR-NEXT: cir.switch (%[[COND]] : !s32i) {
106106
// CIR-NEXT: cir.case(default, []) {
107107
// CIR-NEXT: cir.break
108108
// CIR-NEXT: }
@@ -131,24 +131,24 @@ int sw4(int a) {
131131
}
132132

133133
// CIR: cir.func @_Z3sw4i
134-
// CIR: cir.switch (%4 : !s32i) {
134+
// CIR: cir.switch (%[[COND:.*]] : !s32i) {
135135
// CIR-NEXT: cir.case(equal, [#cir.int<42> : !s32i]) {
136136
// CIR-NEXT: cir.scope {
137-
// CIR-NEXT: %5 = cir.const #cir.int<3> : !s32i
138-
// CIR-NEXT: cir.store %5, %1 : !s32i, !cir.ptr<!s32i>
139-
// CIR-NEXT: %6 = cir.load %1 : !cir.ptr<!s32i>, !s32i
140-
// CIR-NEXT: cir.return %6 : !s32i
137+
// CIR-NEXT: %[[THREE:.*]] = cir.const #cir.int<3> : !s32i
138+
// CIR-NEXT: cir.store %[[THREE]], %[[RETVAL:.*]] : !s32i, !cir.ptr<!s32i>
139+
// CIR-NEXT: %[[RET3:.*]] = cir.load %[[RETVAL]] : !cir.ptr<!s32i>, !s32i
140+
// CIR-NEXT: cir.return %[[RET3]] : !s32i
141141
// CIR-NEXT: }
142142
// CIR-NEXT: cir.yield
143143
// CIR-NEXT: }
144144
// CIR-NEXT: cir.case(default, []) {
145-
// CIR-NEXT: %5 = cir.const #cir.int<2> : !s32i
146-
// CIR-NEXT: cir.store %5, %1 : !s32i, !cir.ptr<!s32i>
147-
// CIR-NEXT: %6 = cir.load %1 : !cir.ptr<!s32i>, !s32i
148-
// CIR-NEXT: cir.return %6 : !s32i
145+
// CIR-NEXT: %[[TWO:.*]] = cir.const #cir.int<2> : !s32i
146+
// CIR-NEXT: cir.store %[[TWO]], %[[RETVAL]] : !s32i, !cir.ptr<!s32i>
147+
// CIR-NEXT: %[[RET2:.*]] = cir.load %[[RETVAL]] : !cir.ptr<!s32i>, !s32i
148+
// CIR-NEXT: cir.return %[[RET2]] : !s32i
149149
// CIR-NEXT: }
150150
// CIR-NEXT: cir.yield
151-
// CIR-NEXT: }
151+
// CIR-NEXT: }
152152

153153
// OGCG: define dso_local noundef i32 @_Z3sw4i
154154
// OGCG: entry:
@@ -173,7 +173,7 @@ void sw5(int a) {
173173
}
174174

175175
// CIR: cir.func @_Z3sw5i
176-
// CIR: cir.switch (%1 : !s32i) {
176+
// CIR: cir.switch (%[[A:.*]] : !s32i) {
177177
// CIR-NEXT: cir.case(equal, [#cir.int<1> : !s32i]) {
178178
// CIR-NEXT: cir.yield
179179
// CIR-NEXT: }
@@ -206,7 +206,7 @@ void sw6(int a) {
206206
}
207207

208208
// CIR: cir.func @_Z3sw6i
209-
// CIR: cir.switch (%1 : !s32i) {
209+
// CIR: cir.switch (%[[A:.*]] : !s32i) {
210210
// CIR-NEXT: cir.case(equal, [#cir.int<0> : !s32i]) {
211211
// CIR-NEXT: cir.yield
212212
// CIR-NEXT: }
@@ -261,7 +261,9 @@ void sw7(int a) {
261261
}
262262

263263
// CIR: cir.func @_Z3sw7i
264-
// CIR: cir.case(equal, [#cir.int<0> : !s32i]) {
264+
// CIR: %[[X:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["x"]
265+
// CIR: cir.switch (%[[A:.*]] : !s32i)
266+
// CIR-NEXT: cir.case(equal, [#cir.int<0> : !s32i]) {
265267
// CIR-NEXT: cir.yield
266268
// CIR-NEXT: }
267269
// CIR-NEXT: cir.case(equal, [#cir.int<1> : !s32i]) {
@@ -279,6 +281,8 @@ void sw7(int a) {
279281
// CIR-NEXT: cir.case(equal, [#cir.int<5> : !s32i]) {
280282
// CIR-NEXT: cir.break
281283
// CIR-NEXT: }
284+
// CIR-NEXT: cir.yield
285+
// CIR: }
282286

283287
// OGCG: define dso_local void @_Z3sw7i
284288
// OGCG: entry:
@@ -312,7 +316,8 @@ void sw8(int a) {
312316
}
313317

314318
// CIR: cir.func @_Z3sw8i
315-
// CIR: cir.case(equal, [#cir.int<3> : !s32i]) {
319+
// CIR: cir.switch (%[[A:.*]] : !s32i)
320+
// CIR-NEXT: cir.case(equal, [#cir.int<3> : !s32i]) {
316321
// CIR-NEXT: cir.break
317322
// CIR-NEXT: }
318323
// CIR-NEXT: cir.case(equal, [#cir.int<4> : !s32i]) {
@@ -352,7 +357,8 @@ void sw9(int a) {
352357
}
353358

354359
// CIR: cir.func @_Z3sw9i
355-
// CIR: cir.case(equal, [#cir.int<3> : !s32i]) {
360+
// CIR: cir.switch (%[[A:.*]] : !s32i)
361+
// CIR-NEXT: cir.case(equal, [#cir.int<3> : !s32i]) {
356362
// CIR-NEXT: cir.break
357363
// CIR-NEXT: }
358364
// CIR-NEXT: cir.case(default, []) {
@@ -391,19 +397,20 @@ void sw10(int a) {
391397
}
392398
}
393399

394-
//CIR: cir.func @_Z4sw10i
395-
//CIR: cir.case(equal, [#cir.int<3> : !s32i]) {
396-
//CIR-NEXT: cir.break
397-
//CIR-NEXT: }
398-
//CIR-NEXT: cir.case(equal, [#cir.int<4> : !s32i]) {
399-
//CIR-NEXT: cir.yield
400-
//CIR-NEXT: }
401-
//CIR-NEXT: cir.case(default, []) {
402-
//CIR-NEXT: cir.yield
403-
//CIR-NEXT: }
404-
//CIR-NEXT: cir.case(equal, [#cir.int<5> : !s32i]) {
405-
//CIR-NEXT: cir.break
406-
//CIR-NEXT: }
400+
// CIR: cir.func @_Z4sw10i
401+
// CIR: cir.switch (%[[A:.*]] : !s32i)
402+
// CIR-NEXT: cir.case(equal, [#cir.int<3> : !s32i]) {
403+
// CIR-NEXT: cir.break
404+
// CIR-NEXT: }
405+
// CIR-NEXT: cir.case(equal, [#cir.int<4> : !s32i]) {
406+
// CIR-NEXT: cir.yield
407+
// CIR-NEXT: }
408+
// CIR-NEXT: cir.case(default, []) {
409+
// CIR-NEXT: cir.yield
410+
// CIR-NEXT: }
411+
// CIR-NEXT: cir.case(equal, [#cir.int<5> : !s32i]) {
412+
// CIR-NEXT: cir.break
413+
// CIR-NEXT: }
407414

408415
// OGCG: define dso_local void @_Z4sw10i
409416
// OGCG: entry:
@@ -439,25 +446,26 @@ void sw11(int a) {
439446
}
440447
}
441448

442-
//CIR: cir.func @_Z4sw11i
443-
//CIR: cir.case(equal, [#cir.int<3> : !s32i]) {
444-
//CIR-NEXT: cir.break
445-
//CIR-NEXT: }
446-
//CIR-NEXT: cir.case(equal, [#cir.int<4> : !s32i]) {
447-
//CIR-NEXT: cir.yield
448-
//CIR-NEXT: }
449-
//CIR-NEXT: cir.case(equal, [#cir.int<5> : !s32i]) {
450-
//CIR-NEXT: cir.yield
451-
//CIR-NEXT: }
452-
//CIR-NEXT: cir.case(default, []) {
453-
//CIR-NEXT: cir.yield
454-
//CIR-NEXT: }
455-
//CIR-NEXT: cir.case(equal, [#cir.int<6> : !s32i]) {
456-
//CIR-NEXT: cir.yield
457-
//CIR-NEXT: }
458-
//CIR-NEXT: cir.case(equal, [#cir.int<7> : !s32i]) {
459-
//CIR-NEXT: cir.break
460-
//CIR-NEXT: }
449+
// CIR: cir.func @_Z4sw11i
450+
// CIR: cir.switch (%[[A:.*]] : !s32i)
451+
// CIR-NEXT: cir.case(equal, [#cir.int<3> : !s32i]) {
452+
// CIR-NEXT: cir.break
453+
// CIR-NEXT: }
454+
// CIR-NEXT: cir.case(equal, [#cir.int<4> : !s32i]) {
455+
// CIR-NEXT: cir.yield
456+
// CIR-NEXT: }
457+
// CIR-NEXT: cir.case(equal, [#cir.int<5> : !s32i]) {
458+
// CIR-NEXT: cir.yield
459+
// CIR-NEXT: }
460+
// CIR-NEXT: cir.case(default, []) {
461+
// CIR-NEXT: cir.yield
462+
// CIR-NEXT: }
463+
// CIR-NEXT: cir.case(equal, [#cir.int<6> : !s32i]) {
464+
// CIR-NEXT: cir.yield
465+
// CIR-NEXT: }
466+
// CIR-NEXT: cir.case(equal, [#cir.int<7> : !s32i]) {
467+
// CIR-NEXT: cir.break
468+
// CIR-NEXT: }
461469

462470
// OGCG: define dso_local void @_Z4sw11i
463471
// OGCG: entry:
@@ -533,7 +541,7 @@ void sw13(int a, int b) {
533541
// CIR-NEXT: cir.yield
534542
// CIR-NEXT: }
535543
// CIR-NEXT: }
536-
// CIR: cir.yield
544+
// CIR: cir.yield
537545
// CIR: }
538546
// CIR: cir.return
539547

@@ -688,7 +696,7 @@ int nested_switch(int a) {
688696
return 0;
689697
}
690698

691-
// CIR: cir.switch (%6 : !s32i) {
699+
// CIR: cir.switch (%[[COND:.*]] : !s32i) {
692700
// CIR: cir.case(equal, [#cir.int<0> : !s32i]) {
693701
// CIR: cir.yield
694702
// CIR: }

0 commit comments

Comments
 (0)