diff options
author | Eli Friedman <efriedma@codeaurora.org> | 2016-12-06 22:49:36 +0000 |
---|---|---|
committer | Eli Friedman <efriedma@codeaurora.org> | 2016-12-06 22:49:36 +0000 |
commit | 0e51e5e82d0c128b7779df25fac11b4c67d50425 (patch) | |
tree | e48fc8a7fee618afab0f8a550eb4fef8f027d230 /test/CodeGen | |
parent | 6b92e1ac7057e290f8e141c919d1e711bcb40fdf (diff) |
[CodeGen] Fix result type for SMULO/UMULO legalization
On some platforms (like MSP430) the second element of the result
structure for SMULO/UMULO may have a shorter type than the one
returned by SetCC. We need to truncate it to the right type, or
else some incorrect code may be generated later on.
This fixes issue https://github.com/rust-lang/rust/issues/37829
Patch by Vadzim Dambrouski!
Differential Revision: https://reviews.llvm.org/D27154
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@288857 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGen')
-rw-r--r-- | test/CodeGen/MSP430/umulo-16.ll | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/CodeGen/MSP430/umulo-16.ll b/test/CodeGen/MSP430/umulo-16.ll new file mode 100644 index 00000000000..bd421379147 --- /dev/null +++ b/test/CodeGen/MSP430/umulo-16.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s -march=msp430 | FileCheck %s +target datalayout = "e-m:e-p:16:16-i32:16:32-a:16-n8:16" +target triple = "msp430" + +define void @foo(i16 %arg) unnamed_addr { +entry-block: + br i1 undef, label %bb2, label %bb3 + +bb2: ; preds = %entry-block + unreachable + +bb3: ; preds = %entry-block + %0 = call { i16, i1 } @llvm.umul.with.overflow.i16(i16 undef, i16 %arg) +; CHECK: call + %1 = extractvalue { i16, i1 } %0, 1 + %2 = call i1 @llvm.expect.i1(i1 %1, i1 false) + br i1 %2, label %panic, label %bb5 + +bb5: ; preds = %bb3 + unreachable + +panic: ; preds = %bb3 + unreachable +} + +; Function Attrs: nounwind readnone +declare i1 @llvm.expect.i1(i1, i1) #0 + +; Function Attrs: nounwind readnone +declare { i16, i1 } @llvm.umul.with.overflow.i16(i16, i16) #0 + +attributes #0 = { nounwind readnone } |