mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-27 14:45:50 +00:00
918871ee01
(eliminating some extends) if the new type of the computation is legal or if both the source and dest are illegal. This prevents instcombine from changing big chains of computation into i64 on 32-bit targets for example. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86398 91177308-0d34-0410-b5e6-96231b3b80d8
18 lines
747 B
LLVM
18 lines
747 B
LLVM
; RUN: opt < %s -instcombine -S | FileCheck %s
|
|
|
|
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128"
|
|
|
|
define i16 @test1(i16 %a) {
|
|
%tmp = zext i16 %a to i32 ; <i32> [#uses=2]
|
|
%tmp21 = lshr i32 %tmp, 8 ; <i32> [#uses=1]
|
|
; CHECK: %tmp21 = lshr i16 %a, 8
|
|
%tmp5 = mul i32 %tmp, 5 ; <i32> [#uses=1]
|
|
; CHECK: %tmp5 = mul i16 %a, 5
|
|
%tmp.upgrd.32 = or i32 %tmp21, %tmp5 ; <i32> [#uses=1]
|
|
; CHECK: %tmp.upgrd.32 = or i16 %tmp21, %tmp5
|
|
%tmp.upgrd.3 = trunc i32 %tmp.upgrd.32 to i16 ; <i16> [#uses=1]
|
|
ret i16 %tmp.upgrd.3
|
|
; CHECK: ret i16 %tmp.upgrd.32
|
|
}
|
|
|