Mercurial > hg > Members > tobaru > cbc > CbC_llvm
view test/CodeGen/X86/zext-fold.ll @ 33:e4204d083e25
LLVM 3.5
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 14:32:10 +0900 |
parents | 95c75e76d11b |
children | 1172e4bd9c6f |
line wrap: on
line source
; RUN: llc < %s -mcpu=generic -march=x86 -enable-misched=false | FileCheck %s ;; Simple case define i32 @test1(i8 %x) nounwind readnone { %A = and i8 %x, -32 %B = zext i8 %A to i32 ret i32 %B } ; CHECK: test1 ; CHECK: movzbl ; CHECK-NEXT: andl {{.*}}224 ;; Multiple uses of %x but easily extensible. define i32 @test2(i8 %x) nounwind readnone { %A = and i8 %x, -32 %B = zext i8 %A to i32 %C = or i8 %x, 63 %D = zext i8 %C to i32 %E = add i32 %B, %D ret i32 %E } ; CHECK: test2 ; CHECK: movzbl ; CHECK: andl $224 ; CHECK: orl $63 declare void @use(i32, i8) ;; Multiple uses of %x where we shouldn't extend the load. define void @test3(i8 %x) nounwind readnone { %A = and i8 %x, -32 %B = zext i8 %A to i32 call void @use(i32 %B, i8 %x) ret void } ; CHECK: test3 ; CHECK: movzbl {{[0-9]+}}(%esp), [[REGISTER:%e[a-z]{2}]] ; CHECK-NEXT: movl [[REGISTER]], 4(%esp) ; CHECK-NEXT: andl $224, [[REGISTER]] ; CHECK-NEXT: movl [[REGISTER]], (%esp) ; CHECK-NEXT: call{{.*}}use