phst updated this revision to Diff 515695. phst added a comment. Herald added a project: clang-tools-extra. Herald added a subscriber: cfe-commits.
- Check for a ‘buffer’ type instead of ‘buffer-live’. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D148918/new/ https://reviews.llvm.org/D148918 Files: clang-tools-extra/clang-include-fixer/tool/clang-include-fixer.el llvm/test/Transforms/Util/flattencfg.ll
Index: llvm/test/Transforms/Util/flattencfg.ll =================================================================== --- llvm/test/Transforms/Util/flattencfg.ll +++ llvm/test/Transforms/Util/flattencfg.ll @@ -1,11 +1,27 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 ; RUN: opt -passes=flattencfg -S < %s | FileCheck %s ; This test checks whether the pass completes without a crash. ; The code is not transformed in any way -; -; CHECK-LABEL: @test_not_crash define void @test_not_crash(i32 %in_a) #0 { +; CHECK-LABEL: define void @test_not_crash +; CHECK-SAME: (i32 [[IN_A:%.*]]) { +; CHECK-NEXT: entry: +; CHECK-NEXT: [[CMP0:%.*]] = icmp eq i32 [[IN_A]], -1 +; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[IN_A]], 0 +; CHECK-NEXT: [[COND0:%.*]] = and i1 [[CMP0]], [[CMP1]] +; CHECK-NEXT: br i1 [[COND0]], label [[B0:%.*]], label [[B1:%.*]] +; CHECK: b0: +; CHECK-NEXT: [[CMP2:%.*]] = icmp eq i32 [[IN_A]], 0 +; CHECK-NEXT: [[CMP3:%.*]] = icmp ne i32 [[IN_A]], 1 +; CHECK-NEXT: [[COND1:%.*]] = or i1 [[CMP2]], [[CMP3]] +; CHECK-NEXT: br i1 [[COND1]], label [[EXIT:%.*]], label [[B1]] +; CHECK: b1: +; CHECK-NEXT: br label [[EXIT]] +; CHECK: exit: +; CHECK-NEXT: ret void +; entry: %cmp0 = icmp eq i32 %in_a, -1 %cmp1 = icmp ne i32 %in_a, 0 @@ -25,17 +41,19 @@ ret void } -; CHECK-LABEL: @test_not_crash2 +define void @test_not_crash2(float %a, float %b) #0 { +; CHECK-LABEL: define void @test_not_crash2 +; CHECK-SAME: (float [[A:%.*]], float [[B:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: %0 = fcmp ult float %a -; CHECK-NEXT: %1 = fcmp ult float %b -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = and i1 %0, %1 -; CHECK-NEXT: br i1 [[COND]], label %bb4, label %bb3 +; CHECK-NEXT: [[TMP0:%.*]] = fcmp ult float [[A]], 1.000000e+00 +; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult float [[B]], 1.000000e+00 +; CHECK-NEXT: [[TMP2:%.*]] = and i1 [[TMP0]], [[TMP1]] +; CHECK-NEXT: br i1 [[TMP2]], label [[BB4:%.*]], label [[BB3:%.*]] ; CHECK: bb3: -; CHECK-NEXT: br label %bb4 +; CHECK-NEXT: br label [[BB4]] ; CHECK: bb4: ; CHECK-NEXT: ret void -define void @test_not_crash2(float %a, float %b) #0 { +; entry: %0 = fcmp ult float %a, 1.000000e+00 br i1 %0, label %bb0, label %bb1 @@ -54,18 +72,20 @@ br i1 %1, label %bb4, label %bb3 } -; CHECK-LABEL: @test_not_crash3 +define void @test_not_crash3(i32 %a) #0 { +; CHECK-LABEL: define void @test_not_crash3 +; CHECK-SAME: (i32 [[A:%.*]]) { ; CHECK-NEXT: entry: -; CHECK-NEXT: %a_eq_0 = icmp eq i32 %a, 0 -; CHECK-NEXT: %a_eq_1 = icmp eq i32 %a, 1 -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = or i1 %a_eq_0, %a_eq_1 -; CHECK-NEXT: br i1 [[COND]], label %bb2, label %bb3 +; CHECK-NEXT: [[A_EQ_0:%.*]] = icmp eq i32 [[A]], 0 +; CHECK-NEXT: [[A_EQ_1:%.*]] = icmp eq i32 [[A]], 1 +; CHECK-NEXT: [[TMP0:%.*]] = or i1 [[A_EQ_0]], [[A_EQ_1]] +; CHECK-NEXT: br i1 [[TMP0]], label [[BB2:%.*]], label [[BB3:%.*]] ; CHECK: bb2: -; CHECK-NEXT: br label %bb3 +; CHECK-NEXT: br label [[BB3]] ; CHECK: bb3: -; CHECK-NEXT: %check_badref = phi i32 [ 17, %entry ], [ 11, %bb2 ] +; CHECK-NEXT: [[CHECK_BADREF:%.*]] = phi i32 [ 17, [[ENTRY:%.*]] ], [ 11, [[BB2]] ] ; CHECK-NEXT: ret void -define void @test_not_crash3(i32 %a) #0 { +; entry: %a_eq_0 = icmp eq i32 %a, 0 br i1 %a_eq_0, label %bb0, label %bb1 @@ -88,18 +108,20 @@ @g = global i32 0, align 4 -; CHECK-LABEL: @test_then +define void @test_then(i32 %x, i32 %y, i32 %z) { +; CHECK-LABEL: define void @test_then +; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) { ; CHECK-NEXT: entry.x: -; CHECK-NEXT: %cmp.x = icmp ne i32 %x, 0 -; CHECK-NEXT: %cmp.y = icmp ne i32 %y, 0 -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = or i1 %cmp.x, %cmp.y -; CHECK-NEXT: br i1 [[COND]], label %if.then.y, label %exit +; CHECK-NEXT: [[CMP_X:%.*]] = icmp ne i32 [[X]], 0 +; CHECK-NEXT: [[CMP_Y:%.*]] = icmp ne i32 [[Y]], 0 +; CHECK-NEXT: [[TMP0:%.*]] = or i1 [[CMP_X]], [[CMP_Y]] +; CHECK-NEXT: br i1 [[TMP0]], label [[IF_THEN_Y:%.*]], label [[EXIT:%.*]] ; CHECK: if.then.y: -; CHECK-NEXT: store i32 %z, ptr @g, align 4 -; CHECK-NEXT: br label %exit +; CHECK-NEXT: store i32 [[Z]], ptr @g, align 4 +; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret void -define void @test_then(i32 %x, i32 %y, i32 %z) { +; entry.x: %cmp.x = icmp ne i32 %x, 0 br i1 %cmp.x, label %if.then.x, label %entry.y @@ -120,18 +142,20 @@ ret void } -; CHECK-LABEL: @test_else +define void @test_else(i32 %x, i32 %y, i32 %z) { +; CHECK-LABEL: define void @test_else +; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) { ; CHECK-NEXT: entry.x: -; CHECK-NEXT: %cmp.x = icmp eq i32 %x, 0 -; CHECK-NEXT: %cmp.y = icmp eq i32 %y, 0 -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = and i1 %cmp.x, %cmp.y -; CHECK-NEXT: br i1 [[COND]], label %exit, label %if.else.y +; CHECK-NEXT: [[CMP_X:%.*]] = icmp eq i32 [[X]], 0 +; CHECK-NEXT: [[CMP_Y:%.*]] = icmp eq i32 [[Y]], 0 +; CHECK-NEXT: [[TMP0:%.*]] = and i1 [[CMP_X]], [[CMP_Y]] +; CHECK-NEXT: br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_ELSE_Y:%.*]] ; CHECK: if.else.y: -; CHECK-NEXT: store i32 %z, ptr @g, align 4 -; CHECK-NEXT: br label %exit +; CHECK-NEXT: store i32 [[Z]], ptr @g, align 4 +; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret void -define void @test_else(i32 %x, i32 %y, i32 %z) { +; entry.x: %cmp.x = icmp eq i32 %x, 0 br i1 %cmp.x, label %entry.y, label %if.else.x @@ -152,18 +176,20 @@ ret void } -; CHECK-LABEL: @test_combine_and +define void @test_combine_and(i32 %x, i32 %y, i32 %z) { +; CHECK-LABEL: define void @test_combine_and +; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) { ; CHECK-NEXT: entry.x: -; CHECK-NEXT: %cmp.x = icmp eq i32 %x, 0 -; CHECK-NEXT: %cmp.y = icmp eq i32 %y, 0 -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = and i1 %cmp.x, %cmp.y -; CHECK-NEXT: br i1 [[COND]], label %exit, label %if.then.y +; CHECK-NEXT: [[CMP_X:%.*]] = icmp eq i32 [[X]], 0 +; CHECK-NEXT: [[CMP_Y:%.*]] = icmp eq i32 [[Y]], 0 +; CHECK-NEXT: [[TMP0:%.*]] = and i1 [[CMP_X]], [[CMP_Y]] +; CHECK-NEXT: br i1 [[TMP0]], label [[EXIT:%.*]], label [[IF_THEN_Y:%.*]] ; CHECK: if.then.y: -; CHECK-NEXT: store i32 %z, ptr @g, align 4 -; CHECK-NEXT: br label %exit +; CHECK-NEXT: store i32 [[Z]], ptr @g, align 4 +; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret void -define void @test_combine_and(i32 %x, i32 %y, i32 %z) { +; entry.x: %cmp.x = icmp eq i32 %x, 0 br i1 %cmp.x, label %entry.y, label %if.else.x @@ -184,18 +210,20 @@ ret void } -; CHECK-LABEL: @test_combine_or +define void @test_combine_or(i32 %x, i32 %y, i32 %z) { +; CHECK-LABEL: define void @test_combine_or +; CHECK-SAME: (i32 [[X:%.*]], i32 [[Y:%.*]], i32 [[Z:%.*]]) { ; CHECK-NEXT: entry.x: -; CHECK-NEXT: %cmp.x = icmp ne i32 %x, 0 -; CHECK-NEXT: %cmp.y = icmp ne i32 %y, 0 -; CHECK-NEXT: [[COND:%[a-z0-9]+]] = or i1 %cmp.x, %cmp.y -; CHECK-NEXT: br i1 [[COND]], label %if.else.y, label %exit +; CHECK-NEXT: [[CMP_X:%.*]] = icmp ne i32 [[X]], 0 +; CHECK-NEXT: [[CMP_Y:%.*]] = icmp ne i32 [[Y]], 0 +; CHECK-NEXT: [[TMP0:%.*]] = or i1 [[CMP_X]], [[CMP_Y]] +; CHECK-NEXT: br i1 [[TMP0]], label [[IF_ELSE_Y:%.*]], label [[EXIT:%.*]] ; CHECK: if.else.y: -; CHECK-NEXT: store i32 %z, ptr @g, align 4 -; CHECK-NEXT: br label %exit +; CHECK-NEXT: store i32 [[Z]], ptr @g, align 4 +; CHECK-NEXT: br label [[EXIT]] ; CHECK: exit: ; CHECK-NEXT: ret void -define void @test_combine_or(i32 %x, i32 %y, i32 %z) { +; entry.x: %cmp.x = icmp ne i32 %x, 0 br i1 %cmp.x, label %if.then.x, label %entry.y @@ -216,12 +244,19 @@ ret void } -; This would crash. - declare i1 @llvm.smax.i1(i1, i1) #0 -; CHECK-LABEL: @PR56875 define void @PR56875(i1 %val_i1_5) { +; CHECK-LABEL: define void @PR56875 +; CHECK-SAME: (i1 [[VAL_I1_5:%.*]]) { +; CHECK-NEXT: entry_1: +; CHECK-NEXT: ret void +; CHECK: bb_2: +; CHECK-NEXT: br label [[BB_4:%.*]] +; CHECK: bb_4: +; CHECK-NEXT: [[VAL_I1_46:%.*]] = call i1 @llvm.smax.i1(i1 [[VAL_I1_5]], i1 [[VAL_I1_5]]) +; CHECK-NEXT: br i1 [[VAL_I1_46]], label [[BB_4]], label [[BB_2:%.*]] +; entry_1: ret void Index: clang-tools-extra/clang-include-fixer/tool/clang-include-fixer.el =================================================================== --- clang-tools-extra/clang-include-fixer/tool/clang-include-fixer.el +++ clang-tools-extra/clang-include-fixer/tool/clang-include-fixer.el @@ -168,9 +168,9 @@ only STDERR may be nil. CALLBACK is called in the case of success; it is called with a single argument, STDOUT. On failure, a buffer containing the error output is displayed." - (cl-check-type stdin buffer-live) - (cl-check-type stdout buffer-live) - (cl-check-type stderr (or null buffer-live)) + (cl-check-type stdin buffer) + (cl-check-type stdout buffer) + (cl-check-type stderr (or null buffer)) (cl-check-type callback function) (lambda (process event) (cl-check-type process process) @@ -192,7 +192,7 @@ (defun clang-include-fixer--replace-buffer (stdout) "Replace current buffer by content of STDOUT." - (cl-check-type stdout buffer-live) + (cl-check-type stdout buffer) (barf-if-buffer-read-only) (cond ((fboundp 'replace-buffer-contents) (replace-buffer-contents stdout)) ((clang-include-fixer--insert-line stdout (current-buffer))) @@ -207,8 +207,8 @@ line missing from TO, insert that line into TO so that the buffer contents are equal and return non-nil. Otherwise, do nothing and return nil. Buffer restrictions are ignored." - (cl-check-type from buffer-live) - (cl-check-type to buffer-live) + (cl-check-type from buffer) + (cl-check-type to buffer) (with-current-buffer from (save-excursion (save-restriction
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits