mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 00:29:20 +00:00
Summary: Fix pr21099 The pseudocode of what we were doing (spread through two functions) was: if (operand.doesNotFitIn32Bits()) Opc.initializeWithFoo(); if (operand < 0) operand = -operand; if (operand.doesFitIn8Bits()) Opc.initializeWithBar(); else if (operand.doesFitIn32Bits()) Opc.initializeWithBlah(); doStuff(Opc); So for operand == INT32_MIN, Opc was never initialized because the operand changes from fitting in 32 bits to not fitting, causing the various bugs/error messages noted by pr21099. This patch adds an extra test at the beginning for this case, and an llvm_unreachable to have better error message if the operand ends up not fitting in 32-bits at the end. Test Plan: new test + make check Reviewers: jfb Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D5655 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219257 91177308-0d34-0410-b5e6-96231b3b80d8
11 lines
281 B
LLVM
11 lines
281 B
LLVM
; RUN: llc < %s -O2 -march=x86-64 -verify-machineinstrs | FileCheck %s
|
|
|
|
define void @pr21099(i64* %p) {
|
|
; CHECK-LABEL: pr21099
|
|
; CHECK: lock
|
|
; CHECK-NEXT: addq $-2147483648
|
|
; This number is INT32_MIN: 0x80000000UL
|
|
%1 = atomicrmw add i64* %p, i64 -2147483648 seq_cst
|
|
ret void
|
|
}
|