Skip to content

[ConstraintElim] Decompose sub nsw #118219

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Dec 16, 2024

Conversation

dtcxzyw
Copy link
Member

@dtcxzyw dtcxzyw commented Dec 1, 2024

Closes #118211.

@llvmbot
Copy link
Member

llvmbot commented Dec 1, 2024

@llvm/pr-subscribers-llvm-transforms

Author: Yingwei Zheng (dtcxzyw)

Changes

Closes #118211.


Full diff: https://github.com/llvm/llvm-project/pull/118219.diff

2 Files Affected:

  • (modified) llvm/lib/Transforms/Scalar/ConstraintElimination.cpp (+7)
  • (added) llvm/test/Transforms/ConstraintElimination/sub-nsw.ll (+129)
diff --git a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
index 4884c23f16e12a..2f5ea8a2e46813 100644
--- a/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/ConstraintElimination.cpp
@@ -522,6 +522,13 @@ static Decomposition decompose(Value *V,
     if (match(V, m_NSWAdd(m_Value(Op0), m_Value(Op1))))
       return MergeResults(Op0, Op1, IsSigned);
 
+    if (match(V, m_NSWSub(m_Value(Op0), m_Value(Op1)))) {
+      auto ResA = decompose(Op0, Preconditions, IsSigned, DL);
+      auto ResB = decompose(Op1, Preconditions, IsSigned, DL);
+      ResA.sub(ResB);
+      return ResA;
+    }
+
     ConstantInt *CI;
     if (match(V, m_NSWMul(m_Value(Op0), m_ConstantInt(CI))) && canUseSExt(CI)) {
       auto Result = decompose(Op0, Preconditions, IsSigned, DL);
diff --git a/llvm/test/Transforms/ConstraintElimination/sub-nsw.ll b/llvm/test/Transforms/ConstraintElimination/sub-nsw.ll
new file mode 100644
index 00000000000000..3ea60d267043d9
--- /dev/null
+++ b/llvm/test/Transforms/ConstraintElimination/sub-nsw.ll
@@ -0,0 +1,129 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes=constraint-elimination -S %s | FileCheck %s
+
+define i1 @test_decompose_sub_nsw_sgt_nonneg(i32 %x, i32 %y) {
+; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_nonneg(
+; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 10
+; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK:       [[IF_THEN]]:
+; CHECK-NEXT:    ret i1 true
+; CHECK:       [[IF_ELSE]]:
+; CHECK-NEXT:    ret i1 true
+;
+entry:
+  %sub = sub nsw i32 %y, %x
+  %cond = icmp sgt i32 %sub, 10
+  br i1 %cond, label %if.then, label %if.else
+
+if.then:
+  %ret = icmp slt i32 %x, %y
+  ret i1 %ret
+
+if.else:
+  ret i1 true
+}
+
+define i1 @test_decompose_sub_nsw_sgt_zero(i32 %x, i32 %y) {
+; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_zero(
+; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 0
+; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK:       [[IF_THEN]]:
+; CHECK-NEXT:    ret i1 true
+; CHECK:       [[IF_ELSE]]:
+; CHECK-NEXT:    ret i1 true
+;
+entry:
+  %sub = sub nsw i32 %y, %x
+  %cond = icmp sgt i32 %sub, 0
+  br i1 %cond, label %if.then, label %if.else
+
+if.then:
+  %ret = icmp slt i32 %x, %y
+  ret i1 %ret
+
+if.else:
+  ret i1 true
+}
+
+define i1 @test_decompose_sub_nsw_sgt_zero_inv(i32 %x, i32 %y) {
+; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_zero_inv(
+; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 10
+; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK:       [[IF_THEN]]:
+; CHECK-NEXT:    ret i1 false
+; CHECK:       [[IF_ELSE]]:
+; CHECK-NEXT:    ret i1 true
+;
+entry:
+  %sub = sub nsw i32 %y, %x
+  %cond = icmp sgt i32 %sub, 10
+  br i1 %cond, label %if.then, label %if.else
+
+if.then:
+  %ret = icmp sge i32 %x, %y
+  ret i1 %ret
+
+if.else:
+  ret i1 true
+}
+
+define i1 @test_decompose_sub_nonsw_sgt_zero(i32 %x, i32 %y) {
+; CHECK-LABEL: define i1 @test_decompose_sub_nonsw_sgt_zero(
+; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[SUB:%.*]] = sub i32 [[Y]], [[X]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], 10
+; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK:       [[IF_THEN]]:
+; CHECK-NEXT:    [[RET:%.*]] = icmp slt i32 [[X]], [[Y]]
+; CHECK-NEXT:    ret i1 [[RET]]
+; CHECK:       [[IF_ELSE]]:
+; CHECK-NEXT:    ret i1 true
+;
+entry:
+  %sub = sub i32 %y, %x
+  %cond = icmp sgt i32 %sub, 10
+  br i1 %cond, label %if.then, label %if.else
+
+if.then:
+  %ret = icmp slt i32 %x, %y
+  ret i1 %ret
+
+if.else:
+  ret i1 true
+}
+
+define i1 @test_decompose_sub_nsw_sgt_neg(i32 %x, i32 %y) {
+; CHECK-LABEL: define i1 @test_decompose_sub_nsw_sgt_neg(
+; CHECK-SAME: i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[SUB:%.*]] = sub nsw i32 [[Y]], [[X]]
+; CHECK-NEXT:    [[COND:%.*]] = icmp sgt i32 [[SUB]], -10
+; CHECK-NEXT:    br i1 [[COND]], label %[[IF_THEN:.*]], label %[[IF_ELSE:.*]]
+; CHECK:       [[IF_THEN]]:
+; CHECK-NEXT:    [[RET:%.*]] = icmp slt i32 [[X]], [[Y]]
+; CHECK-NEXT:    ret i1 [[RET]]
+; CHECK:       [[IF_ELSE]]:
+; CHECK-NEXT:    ret i1 true
+;
+entry:
+  %sub = sub nsw i32 %y, %x
+  %cond = icmp sgt i32 %sub, -10
+  br i1 %cond, label %if.then, label %if.else
+
+if.then:
+  %ret = icmp slt i32 %x, %y
+  ret i1 %ret
+
+if.else:
+  ret i1 true
+}

Copy link
Contributor

@nikic nikic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. As the constraint system works in terms of abstract (non-wrapping) arithmetic here, the fact that a -nsw b is not the same as a +nsw (-1 * b) shouldn't matter.

I strongly suspect that it's possible to construct cases where our current decomposition implementation incorrectly handles the case where constant coefficients overflow, though this is not specific to this case.

@dtcxzyw
Copy link
Member Author

dtcxzyw commented Dec 2, 2024

Regression (reduced from dtcxzyw/llvm-opt-benchmark#1781 (comment)):

; bin/opt -O3 reduced.ll -S
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; Function Attrs: mustprogress
define void @_ZN2cv3hal12cpu_baselineL12fastAtan32f_EPKfS3_Pfib(i32 %0) #0 {
  br label %2

2:                                                ; preds = %4, %1
  %.01 = phi i32 [ 0, %1 ], [ %6, %4 ]
  %3 = icmp slt i32 %.01, %0
  br i1 %3, label %4, label %7

4:                                                ; preds = %2
  %5 = load volatile float, ptr null, align 4
  %6 = add i32 %.01, 1
  br label %2

7:                                                ; preds = %2
  ret void
}

; Function Attrs: mustprogress
define void @_ZN2cv3hal12cpu_baseline11fastAtan64fEPKdS3_Pdib(ptr %0, i32 %1) #0 personality ptr null {
  br label %3

3:                                                ; preds = %10, %2
  %.0 = phi i32 [ 0, %2 ], [ 128, %10 ]
  %4 = icmp slt i32 %.0, %1
  br i1 %4, label %5, label %11

5:                                                ; preds = %3
  %6 = sub i32 %1, %.0
  br label %7

7:                                                ; preds = %9, %5
  %.09 = phi i32 [ 0, %5 ], [ 1, %9 ]
  %8 = icmp slt i32 %.09, %6
  br i1 %8, label %9, label %10

9:                                                ; preds = %7
  store float 0.000000e+00, ptr %0, align 4
  br label %7

10:                                               ; preds = %7
  call void @_ZN2cv3hal12cpu_baselineL12fastAtan32f_EPKfS3_Pfib(i32 %6)
  br label %3

11:                                               ; preds = %3
  ret void
}

attributes #0 = { mustprogress }

Before (22417ec)

; ModuleID = 'reduced.ll'
source_filename = "reduced.ll"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; Function Attrs: mustprogress nofree norecurse nounwind
define void @_ZN2cv3hal12cpu_baselineL12fastAtan32f_EPKfS3_Pfib(i32 %0) local_unnamed_addr #0 {
  %2 = icmp sgt i32 %0, 0
  br i1 %2, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1, %.lr.ph
  %.011 = phi i32 [ %4, %.lr.ph ], [ 0, %1 ]
  %3 = load volatile float, ptr null, align 4294967296
  %4 = add nuw nsw i32 %.011, 1
  %exitcond.not = icmp eq i32 %4, %0
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %1
  ret void
}

; Function Attrs: mustprogress nofree norecurse nounwind
define void @_ZN2cv3hal12cpu_baseline11fastAtan64fEPKdS3_Pdib(ptr nocapture writeonly %0, i32 %1) local_unnamed_addr #0 personality ptr null {
  %.fr7 = freeze i32 %1
  %3 = icmp sgt i32 %.fr7, 0
  br i1 %3, label %.lr.ph5, label %._crit_edge6

.lr.ph5:                                          ; preds = %2
  %4 = icmp samesign ugt i32 %.fr7, 128
  %5 = xor i1 %4, true
  call void @llvm.assume(i1 %5)
  store float 0.000000e+00, ptr %0, align 4
  %.not = icmp eq i32 %.fr7, 1
  tail call void @llvm.assume(i1 %.not)
  %6 = load volatile float, ptr null, align 4294967296
  br label %._crit_edge6

._crit_edge6:                                     ; preds = %.lr.ph5, %2
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
declare void @llvm.assume(i1 noundef) #1

attributes #0 = { mustprogress nofree norecurse nounwind }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }

After:

; ModuleID = 'reduced.ll'
source_filename = "reduced.ll"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; Function Attrs: mustprogress nofree norecurse nounwind
define void @_ZN2cv3hal12cpu_baselineL12fastAtan32f_EPKfS3_Pfib(i32 %0) local_unnamed_addr #0 {
  %2 = icmp sgt i32 %0, 0
  br i1 %2, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %1, %.lr.ph
  %.011 = phi i32 [ %4, %.lr.ph ], [ 0, %1 ]
  %3 = load volatile float, ptr null, align 4294967296
  %4 = add nuw nsw i32 %.011, 1
  %exitcond.not = icmp eq i32 %4, %0
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph

._crit_edge:                                      ; preds = %.lr.ph, %1
  ret void
}

; Function Attrs: mustprogress nofree norecurse nounwind
define void @_ZN2cv3hal12cpu_baseline11fastAtan64fEPKdS3_Pdib(ptr nocapture writeonly %0, i32 %1) local_unnamed_addr #0 personality ptr null {
  %.fr7 = freeze i32 %1
  %3 = icmp sgt i32 %.fr7, 0
  br i1 %3, label %.lr.ph5, label %._crit_edge6

.lr.ph5:                                          ; preds = %2
  %4 = icmp samesign ugt i32 %.fr7, 128
  br i1 %4, label %.lr.ph5.split.us, label %.lr.ph

.lr.ph5.split.us:                                 ; preds = %.lr.ph.i.us, %.lr.ph5
  %.03.us = phi i32 [ 0, %.lr.ph5 ], [ 128, %.lr.ph.i.us ]
  %5 = sub nsw i32 %.fr7, %.03.us
  %6 = icmp sgt i32 %5, 0
  br i1 %6, label %.lr.ph.us, label %.lr.ph.i.us.preheader

.lr.ph.i.us.preheader:                            ; preds = %.lr.ph.us, %.lr.ph5.split.us
  br label %.lr.ph.i.us

.lr.ph.i.us:                                      ; preds = %.lr.ph.i.us.preheader, %.lr.ph.i.us
  %.011.i.us = phi i32 [ %8, %.lr.ph.i.us ], [ 0, %.lr.ph.i.us.preheader ]
  %7 = load volatile float, ptr null, align 4294967296
  %8 = add nuw nsw i32 %.011.i.us, 1
  %exitcond.not.i.us = icmp eq i32 %8, %5
  br i1 %exitcond.not.i.us, label %.lr.ph5.split.us, label %.lr.ph.i.us

.lr.ph.us:                                        ; preds = %.lr.ph5.split.us
  store float 0.000000e+00, ptr %0, align 4
  %.not8 = icmp eq i32 %5, 1
  tail call void @llvm.assume(i1 %.not8)
  br label %.lr.ph.i.us.preheader

.lr.ph:                                           ; preds = %.lr.ph5
  store float 0.000000e+00, ptr %0, align 4
  %.not = icmp eq i32 %.fr7, 1
  tail call void @llvm.assume(i1 %.not)
  %9 = load volatile float, ptr null, align 4294967296
  br label %._crit_edge6

._crit_edge6:                                     ; preds = %.lr.ph, %2
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write)
declare void @llvm.assume(i1 noundef) #1

attributes #0 = { mustprogress nofree norecurse nounwind }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }

#115893 may fix this problem.

@dtcxzyw dtcxzyw merged commit 003fb2a into llvm:main Dec 16, 2024
10 checks passed
@dtcxzyw dtcxzyw deleted the perf/constriant-elim-decompose-sub-nsw branch December 16, 2024 08:41
@llvm-ci
Copy link
Collaborator

llvm-ci commented Dec 16, 2024

LLVM Buildbot has detected a new failure on builder lldb-remote-linux-ubuntu running on as-builder-9 while building llvm at step 16 "test-check-lldb-api".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/195/builds/2425

Here is the relevant piece of the build log for the reference
Step 16 (test-check-lldb-api) failure: Test just built components: check-lldb-api completed (failure)
...
PASS: lldb-api :: types/TestIntegerType.py (1207 of 1216)
PASS: lldb-api :: types/TestIntegerTypeExpr.py (1208 of 1216)
PASS: lldb-api :: types/TestRecursiveTypes.py (1209 of 1216)
PASS: lldb-api :: types/TestShortType.py (1210 of 1216)
PASS: lldb-api :: types/TestShortTypeExpr.py (1211 of 1216)
PASS: lldb-api :: types/TestLongTypes.py (1212 of 1216)
PASS: lldb-api :: types/TestLongTypesExpr.py (1213 of 1216)
PASS: lldb-api :: tools/lldb-server/TestNonStop.py (1214 of 1216)
PASS: lldb-api :: tools/lldb-server/TestLldbGdbServer.py (1215 of 1216)
UNRESOLVED: lldb-api :: tools/lldb-server/TestGdbRemoteLaunch.py (1216 of 1216)
******************** TEST 'lldb-api :: tools/lldb-server/TestGdbRemoteLaunch.py' FAILED ********************
Script:
--
/usr/bin/python3.12 /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/test/API/dotest.py -u CXXFLAGS -u CFLAGS --env LLVM_LIBS_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib --env LLVM_INCLUDE_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include --env LLVM_TOOLS_DIR=/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin --libcxx-include-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include/c++/v1 --libcxx-include-target-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/include/aarch64-unknown-linux-gnu/c++/v1 --libcxx-library-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib/aarch64-unknown-linux-gnu --arch aarch64 --build-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex --lldb-module-cache-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex/module-cache-lldb/lldb-api --clang-module-cache-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/lldb-test-build.noindex/module-cache-clang/lldb-api --executable /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin/lldb --compiler /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang --dsymutil /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin/dsymutil --make /usr/bin/make --llvm-tools-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./bin --lldb-obj-root /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/tools/lldb --lldb-libs-dir /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/./lib --platform-url connect://jetson-agx-2198.lab.llvm.org:1234 --platform-working-dir /home/ubuntu/lldb-tests --sysroot /mnt/fs/jetson-agx-ubuntu --env ARCH_CFLAGS=-mcpu=cortex-a78 --platform-name remote-linux /home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/llvm-project/lldb/test/API/tools/lldb-server -p TestGdbRemoteLaunch.py
--
Exit Code: 1

Command Output (stdout):
--
lldb version 20.0.0git (https://github.com/llvm/llvm-project.git revision 003fb2aeb49dc7440cab7e009bd264f8f42fc8dc)
  clang revision 003fb2aeb49dc7440cab7e009bd264f8f42fc8dc
  llvm revision 003fb2aeb49dc7440cab7e009bd264f8f42fc8dc
Setting up remote platform 'remote-linux'
Connecting to remote platform 'remote-linux' at 'connect://jetson-agx-2198.lab.llvm.org:1234'...
Connected.
Setting remote platform working directory to '/home/ubuntu/lldb-tests'...
Skipping the following test categories: ['dsym', 'gmodules', 'debugserver', 'objc', 'lldb-dap']
connect to debug monitor on port 16514 failed, attempt #1 of 10
connect to debug monitor on port 14855 failed, attempt #2 of 10
connect to debug monitor on port 14681 failed, attempt #3 of 10
connect to debug monitor on port 12499 failed, attempt #4 of 10
connect to debug monitor on port 15330 failed, attempt #5 of 10
connect to debug monitor on port 15228 failed, attempt #6 of 10
connect to debug monitor on port 15584 failed, attempt #7 of 10
connect to debug monitor on port 16318 failed, attempt #8 of 10
connect to debug monitor on port 19210 failed, attempt #9 of 10
connect to debug monitor on port 12639 failed, attempt #10 of 10

--
Command Output (stderr):
--
WARNING:root:Custom libc++ is not supported for remote runs: ignoring --libcxx arguments
PASS: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_QEnvironmentHexEncoded_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_QEnvironmentHexEncoded_llgs)
PASS: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_QEnvironment_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_QEnvironment_llgs)
UNSUPPORTED: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_launch_failure_via_vRun_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_launch_failure_via_vRun_llgs) (skip on remote platform) 
PASS: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_launch_via_A_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_launch_via_A_llgs)
FAIL: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_launch_via_vRun_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_launch_via_vRun_llgs)
PASS: LLDB (/home/buildbot/worker/as-builder-9/lldb-remote-linux-ubuntu/build/bin/clang-aarch64) :: test_launch_via_vRun_no_args_llgs (TestGdbRemoteLaunch.GdbRemoteLaunchTestCase.test_launch_via_vRun_no_args_llgs)
======================================================================

@dtcxzyw
Copy link
Member Author

dtcxzyw commented Dec 16, 2024

This patch seems to cause a miscompilation :(
Reducing...

@dtcxzyw
Copy link
Member Author

dtcxzyw commented Dec 16, 2024

See #120076.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[ConstraintElim] Y -nsw X s> NonNeg implies Y s> X
4 participants