mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-14 15:19:33 +00:00
[WebAssembly] Fix legalization of shift operators on large integer types.
llvm-svn: 255847
This commit is contained in:
parent
b1cc2b699b
commit
2eb922c6d1
@ -207,6 +207,13 @@ MVT WebAssemblyTargetLowering::getScalarShiftAmountTy(const DataLayout & /*DL*/,
|
||||
unsigned BitWidth = NextPowerOf2(VT.getSizeInBits() - 1);
|
||||
if (BitWidth > 1 && BitWidth < 8)
|
||||
BitWidth = 8;
|
||||
|
||||
if (BitWidth > 64) {
|
||||
BitWidth = 64;
|
||||
assert(BitWidth >= Log2_32_Ceil(VT.getSizeInBits()) &&
|
||||
"64-bit shift counts ought to be enough for anyone");
|
||||
}
|
||||
|
||||
MVT Result = MVT::getIntegerVT(BitWidth);
|
||||
assert(Result != MVT::INVALID_SIMPLE_VALUE_TYPE &&
|
||||
"Unable to represent scalar shift amount type");
|
||||
|
@ -51,3 +51,12 @@ define float @fpconv_f64_f32(double *%p) {
|
||||
%e = fptrunc double %v to float
|
||||
ret float %e
|
||||
}
|
||||
|
||||
; Check that big shifts work. This generates a big pile of code from the
|
||||
; legalizer; the main thing here is that we don't abort.
|
||||
|
||||
; CHECK-LABEL: bigshift:
|
||||
define i1024 @bigshift(i1024 %a, i1024 %b) {
|
||||
%c = shl i1024 %a, %b
|
||||
ret i1024 %c
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user