mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-09-01 19:29:22 +00:00
(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
31 lines
1.3 KiB
LLVM
31 lines
1.3 KiB
LLVM
; Tests to make sure elimination of casts is working correctly
|
|
; 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 i17 @test1(i17 %a) {
|
|
%tmp = zext i17 %a to i37 ; <i37> [#uses=2]
|
|
%tmp21 = lshr i37 %tmp, 8 ; <i37> [#uses=1]
|
|
; CHECK: %tmp21 = lshr i17 %a, 8
|
|
%tmp5 = shl i37 %tmp, 8 ; <i37> [#uses=1]
|
|
; CHECK: %tmp5 = shl i17 %a, 8
|
|
%tmp.upgrd.32 = or i37 %tmp21, %tmp5 ; <i37> [#uses=1]
|
|
; CHECK: %tmp.upgrd.32 = or i17 %tmp21, %tmp5
|
|
%tmp.upgrd.3 = trunc i37 %tmp.upgrd.32 to i17 ; <i17> [#uses=1]
|
|
ret i17 %tmp.upgrd.3
|
|
; CHECK: ret i17 %tmp.upgrd.32
|
|
}
|
|
|
|
define i167 @test2(i167 %a) {
|
|
%tmp = zext i167 %a to i577 ; <i577> [#uses=2]
|
|
%tmp21 = lshr i577 %tmp, 9 ; <i577> [#uses=1]
|
|
; CHECK: %tmp21 = lshr i167 %a, 9
|
|
%tmp5 = shl i577 %tmp, 8 ; <i577> [#uses=1]
|
|
; CHECK: %tmp5 = shl i167 %a, 8
|
|
%tmp.upgrd.32 = or i577 %tmp21, %tmp5 ; <i577> [#uses=1]
|
|
; CHECK: %tmp.upgrd.32 = or i167 %tmp21, %tmp5
|
|
%tmp.upgrd.3 = trunc i577 %tmp.upgrd.32 to i167 ; <i167> [#uses=1]
|
|
ret i167 %tmp.upgrd.3
|
|
; CHECK: ret i167 %tmp.upgrd.32
|
|
}
|