Skip to content

Commit 9c72e10

Browse files
committed
Address review feedback
1 parent d81f7cb commit 9c72e10

File tree

6 files changed

+28
-41
lines changed

6 files changed

+28
-41
lines changed

clang/include/clang/CIR/Dialect/Passes.td

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ def CIRCanonicalize : Pass<"cir-canonicalize"> {
1717
Perform canonicalizations on CIR and removes some redundant operations.
1818

1919
This pass performs basic cleanup and canonicalization transformations that
20-
hopefully do not affect CIR-to-source fidelity and high-level code analysis
21-
passes too much. Example transformations performed in this pass include
22-
empty scope cleanup, trivial try cleanup, redundant branch cleanup, etc.
20+
are not intended to affect CIR-to-source fidelity and high-level code
21+
analysis passes. Example transformations performed in this pass include
22+
empty scope cleanup, trivial `try` cleanup, redundant branch cleanup, etc.
2323
Those more "heavyweight" transformations and those transformations that
2424
could significantly affect CIR-to-source fidelity are performed in the
2525
`cir-simplify` pass.

clang/include/clang/Frontend/FrontendOptions.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,9 +413,11 @@ class FrontendOptions {
413413
unsigned UseClangIRPipeline : 1;
414414

415415
/// Disable Clang IR specific (CIR) passes
416+
LLVM_PREFERRED_TYPE(bool)
416417
unsigned ClangIRDisablePasses : 1;
417418

418419
/// Disable Clang IR (CIR) verifier
420+
LLVM_PREFERRED_TYPE(bool)
419421
unsigned ClangIRDisableCIRVerifier : 1;
420422

421423
CodeCompleteOptions CodeCompleteOpts;

clang/lib/CIR/Dialect/Transforms/CIRCanonicalize.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,14 +68,12 @@ struct RemoveEmptyScope
6868
LogicalResult match(ScopeOp op) const final {
6969
// TODO: Remove this logic once CIR uses MLIR infrastructure to remove
7070
// trivially dead operations
71-
if (op.isEmpty()) {
71+
if (op.isEmpty())
7272
return success();
73-
}
7473

75-
Region *region = &(op.getScopeRegion()); // getRegions().front();
76-
if (region && region->getBlocks().front().getOperations().size() == 1) {
77-
return success(isa<YieldOp>(region->getBlocks().front().front()));
78-
}
74+
Region &region = op.getScopeRegion();
75+
if (region.getBlocks().front().getOperations().size() == 1)
76+
return success(isa<YieldOp>(region.getBlocks().front().front()));
7977

8078
return failure();
8179
}

clang/lib/CIR/FrontendAction/CIRGenAction.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ class CIRGenConsumer : public clang::ASTConsumer {
101101

102102
if (!FEOptions.ClangIRDisablePasses) {
103103
// Setup and run CIR pipeline.
104-
std::string passOptParsingFailure;
105104
if (runCIRToCIRPasses(MlirModule, MlirCtx, C,
106105
!FEOptions.ClangIRDisableCIRVerifier)
107106
.failed()) {

clang/test/CIR/Transforms/canonicalize.cir

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -11,34 +11,29 @@ module {
1111
^bb2: // pred: ^bb1
1212
cir.return
1313
}
14-
// CHECK: cir.func @redundant_br() {
15-
// CHECK-NOT: ^
16-
// CHECK: %[[A:.*]] = cir.alloca !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>, ["a", init] {alignment = 4 : i64}
17-
// CHECK: %[[FOUR:.*]] = cir.const #cir.int<4> : !cir.int<u, 32>
18-
// CHECK: cir.store %[[FOUR]], %[[A]] : !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>
19-
// CHECK-NOT: cir.br
20-
// CHECK-NOT: ^
21-
// CHECK: cir.return
22-
// CHECK: }
14+
// CHECK: cir.func @redundant_br() {
15+
// CHECK-NEXT: %[[A:.*]] = cir.alloca !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>, ["a", init] {alignment = 4 : i64}
16+
// CHECK-NEXT: %[[FOUR:.*]] = cir.const #cir.int<4> : !cir.int<u, 32>
17+
// CHECK-NEXT: cir.store %[[FOUR]], %[[A]] : !cir.int<u, 32>, !cir.ptr<!cir.int<u, 32>>
18+
// CHECK-NEXT: cir.return
19+
// CHECK-NEXT: }
2320

2421
cir.func @empty_scope() {
2522
cir.scope {
2623
}
2724
cir.return
2825
}
29-
// CHECK: cir.func @empty_scope() {
30-
// CHECK-NOT: cir.scope
31-
// CHECK: cir.return
32-
// CHECK: }
26+
// CHECK: cir.func @empty_scope() {
27+
// CHECK-NEXT: cir.return
28+
// CHECK-NEXT: }
3329

3430
cir.func @cast1(%arg0: !cir.bool) -> !cir.bool {
3531
%0 = cir.cast(bool_to_int, %arg0 : !cir.bool), !cir.int<s, 32>
3632
%1 = cir.cast(int_to_bool, %0 : !cir.int<s, 32>), !cir.bool
3733
cir.return %1 : !cir.bool
3834
}
39-
// CHECK: cir.func @cast1(%[[ARG0:.*]]: !cir.bool) -> !cir.bool
40-
// CHECK-NOT: cir.cast
41-
// CHECK: cir.return %[[ARG0]] : !cir.bool
35+
// CHECK: cir.func @cast1(%[[ARG0:.*]]: !cir.bool) -> !cir.bool
36+
// CHECK-NEXT: cir.return %[[ARG0]] : !cir.bool
4237

4338
cir.func @cast2(%arg0: !cir.int<s, 32>) -> !cir.bool {
4439
%0 = cir.cast(int_to_bool, %arg0 : !cir.int<s, 32>), !cir.bool
@@ -47,26 +42,20 @@ module {
4742
%3 = cir.cast(int_to_bool, %2 : !cir.int<s, 64>), !cir.bool
4843
cir.return %3 : !cir.bool
4944
}
50-
// CHECK: cir.func @cast2(%[[ARG0:.*]]: !cir.int<s, 32>) -> !cir.bool
51-
// CHECK: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int<s, 32>), !cir.bool
52-
// CHECK-NOT: cir.cast
53-
// CHECK: cir.return %[[CAST]] : !cir.bool
45+
// CHECK: cir.func @cast2(%[[ARG0:.*]]: !cir.int<s, 32>) -> !cir.bool
46+
// CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int<s, 32>), !cir.bool
47+
// CHECK-NEXT: cir.return %[[CAST]] : !cir.bool
5448

5549
cir.func @no_fold_cast(%arg0: !cir.int<s, 32>) -> !cir.int<s, 64> {
5650
%0 = cir.cast(int_to_bool, %arg0 : !cir.int<s, 32>), !cir.bool
5751
%1 = cir.cast(bool_to_int, %0 : !cir.bool), !cir.int<s, 32>
5852
%2 = cir.cast(integral, %1 : !cir.int<s, 32>), !cir.int<s, 64>
5953
cir.return %2 : !cir.int<s, 64>
6054
}
61-
// CHECK: cir.func @no_fold_cast(%[[ARG0:.*]]: !cir.int<s, 32>) -> !cir.int<s, 64>
62-
// CHECK: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int<s, 32>), !cir.bool
63-
// CHECK: %[[CAST2:.*]] = cir.cast(bool_to_int, %[[CAST]] : !cir.bool), !cir.int<s, 32>
64-
// CHECK: %[[CAST3:.*]] = cir.cast(integral, %[[CAST2]] : !cir.int<s, 32>), !cir.int<s, 64>
65-
// CHECK: cir.return %[[CAST3]] : !cir.int<s, 64>
55+
// CHECK: cir.func @no_fold_cast(%[[ARG0:.*]]: !cir.int<s, 32>) -> !cir.int<s, 64>
56+
// CHECK-NEXT: %[[CAST:.*]] = cir.cast(int_to_bool, %[[ARG0]] : !cir.int<s, 32>), !cir.bool
57+
// CHECK-NEXT: %[[CAST2:.*]] = cir.cast(bool_to_int, %[[CAST]] : !cir.bool), !cir.int<s, 32>
58+
// CHECK-NEXT: %[[CAST3:.*]] = cir.cast(integral, %[[CAST2]] : !cir.int<s, 32>), !cir.int<s, 64>
59+
// CHECK-NEXT: cir.return %[[CAST3]] : !cir.int<s, 64>
6660

6761
}
68-
69-
70-
71-
72-

clang/tools/driver/cc1as_main.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,6 @@ bool AssemblerInvocation::CreateFromArgs(AssemblerInvocation &Opts,
326326
}
327327
}
328328
Opts.LLVMArgs = Args.getAllArgValues(OPT_mllvm);
329-
330329
Opts.OutputPath = std::string(Args.getLastArgValue(OPT_o));
331330
Opts.SplitDwarfOutput =
332331
std::string(Args.getLastArgValue(OPT_split_dwarf_output));

0 commit comments

Comments
 (0)