Please use GitHub pull requests for new patches. Avoid migrating existing patches. Phabricator shutdown timeline
Changeset View
Changeset View
Standalone View
Standalone View
test/CodeGen/X86/TruncAssertZext.ll
Show All 20 Lines | |||||
; CHECK-NEXT: callq foo | ; CHECK-NEXT: callq foo | ||||
; CHECK-NEXT: movabsq $-4294967041, %rcx # imm = 0xFFFFFFFF000000FF | ; CHECK-NEXT: movabsq $-4294967041, %rcx # imm = 0xFFFFFFFF000000FF | ||||
; CHECK-NEXT: andq %rax, %rcx | ; CHECK-NEXT: andq %rax, %rcx | ||||
; CHECK-NEXT: movl %ecx, %ecx | ; CHECK-NEXT: movl %ecx, %ecx | ||||
; CHECK-NEXT: leaq (,%rcx,8), %rax | ; CHECK-NEXT: leaq (,%rcx,8), %rax | ||||
; CHECK-NEXT: subq %rcx, %rax | ; CHECK-NEXT: subq %rcx, %rax | ||||
; CHECK-NEXT: shrq $32, %rax | ; CHECK-NEXT: shrq $32, %rax | ||||
; CHECK-NEXT: popq %rcx | ; CHECK-NEXT: popq %rcx | ||||
; CHECK-NEXT: .Lcfi1: | |||||
; CHECK-NEXT: .cfi_def_cfa_offset 8 | |||||
; CHECK-NEXT: retq | ; CHECK-NEXT: retq | ||||
%b = call i64 @foo() | %b = call i64 @foo() | ||||
%or = and i64 %b, 18446744069414584575 ; this is 0xffffffff000000ff | %or = and i64 %b, 18446744069414584575 ; this is 0xffffffff000000ff | ||||
%trunc = trunc i64 %or to i32 | %trunc = trunc i64 %or to i32 | ||||
br label %l | br label %l | ||||
l: | l: | ||||
%ext = zext i32 %trunc to i64 | %ext = zext i32 %trunc to i64 | ||||
%mul = mul i64 %ext, 7 | %mul = mul i64 %ext, 7 | ||||
br label %m | br label %m | ||||
m: ; keeps dag combine from seeing the multiply and the shift together | m: ; keeps dag combine from seeing the multiply and the shift together | ||||
%shr = lshr i64 %mul, 32 | %shr = lshr i64 %mul, 32 | ||||
trunc i64 %or to i32 ; keeps the and alive so it doesn't simplify | trunc i64 %or to i32 ; keeps the and alive so it doesn't simplify | ||||
ret i64 %shr | ret i64 %shr | ||||
} | } |