1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 20:43:44 +02:00
llvm-mirror/test/CodeGen/MSP430/umulo-16.ll
Eli Friedman 3cc7de085d [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

llvm-svn: 288857
2016-12-06 22:49:36 +00:00

33 lines
969 B
LLVM

; 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 }