mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 05:23:45 +02:00
a701fac7bc
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 llvm-svn: 219257
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
|
|
}
|