[llvm] Adds test coverage for reassociation of scalar & vector boolean types (PR #89899)

Yingwei Zheng via llvm-commits llvm-commits at lists.llvm.org
Thu May 2 10:05:21 PDT 2024


================
@@ -0,0 +1,223 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
+; RUN: opt < %s -passes=reassociate -S | FileCheck %s
+
+define i1 @scalar(i32 %a, i32 %b0, i32 %b1, i32 %b2, i32 %b3, i32 %b4, i32 %b5, i32 %b6, i32 %b7) local_unnamed_addr {
+; CHECK-LABEL: define i1 @scalar(
+; CHECK-SAME: i32 [[A:%.*]], i32 [[B0:%.*]], i32 [[B1:%.*]], i32 [[B2:%.*]], i32 [[B3:%.*]], i32 [[B4:%.*]], i32 [[B5:%.*]], i32 [[B6:%.*]], i32 [[B7:%.*]]) local_unnamed_addr {
+; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i32 [[B0]], [[A]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i32 [[B1]], [[A]]
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i32 [[B2]], [[A]]
+; CHECK-NEXT:    [[CMP3:%.*]] = icmp eq i32 [[B3]], [[A]]
+; CHECK-NEXT:    [[CMP4:%.*]] = icmp eq i32 [[B4]], [[A]]
+; CHECK-NEXT:    [[CMP5:%.*]] = icmp eq i32 [[B5]], [[A]]
+; CHECK-NEXT:    [[CMP6:%.*]] = icmp eq i32 [[B6]], [[A]]
+; CHECK-NEXT:    [[CMP7:%.*]] = icmp eq i32 [[B7]], [[A]]
+; CHECK-NEXT:    [[OR01:%.*]] = or i1 [[CMP0]], [[CMP1]]
+; CHECK-NEXT:    [[OR23:%.*]] = or i1 [[CMP2]], [[CMP3]]
+; CHECK-NEXT:    [[OR45:%.*]] = or i1 [[CMP4]], [[CMP5]]
+; CHECK-NEXT:    [[OR67:%.*]] = or i1 [[CMP6]], [[CMP7]]
+; CHECK-NEXT:    [[OR0123:%.*]] = or i1 [[OR01]], [[OR23]]
+; CHECK-NEXT:    [[OR4567:%.*]] = or i1 [[OR45]], [[OR67]]
+; CHECK-NEXT:    [[OR01234567:%.*]] = or i1 [[OR0123]], [[OR4567]]
+; CHECK-NEXT:    ret i1 [[OR01234567]]
+;
+  %cmp0 = icmp eq i32 %b0, %a
----------------
dtcxzyw wrote:

I don't think the instruction kind of %cmpx matters. It would be better to make them parameters.
See https://godbolt.org/z/5Kfdx6fjn


https://github.com/llvm/llvm-project/pull/89899


More information about the llvm-commits mailing list