1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc < %s -mtriple=i686-- -x86-asm-syntax=intel | FileCheck %s
3
4; PR687
5
6define i64 @foo(i64 %x, i64* %X) {
7; CHECK-LABEL: foo:
8; CHECK:       # %bb.0:
9; CHECK-NEXT:    push esi
10; CHECK-NEXT:    .cfi_def_cfa_offset 8
11; CHECK-NEXT:    .cfi_offset esi, -8
12; CHECK-NEXT:    mov esi, dword ptr [esp + 8]
13; CHECK-NEXT:    mov edx, dword ptr [esp + 12]
14; CHECK-NEXT:    mov eax, dword ptr [esp + 16]
15; CHECK-NEXT:    mov cl, byte ptr [eax]
16; CHECK-NEXT:    mov eax, esi
17; CHECK-NEXT:    shl eax, cl
18; CHECK-NEXT:    shld edx, esi, cl
19; CHECK-NEXT:    test cl, 32
20; CHECK-NEXT:    je .LBB0_2
21; CHECK-NEXT:  # %bb.1:
22; CHECK-NEXT:    mov edx, eax
23; CHECK-NEXT:    xor eax, eax
24; CHECK-NEXT:  .LBB0_2:
25; CHECK-NEXT:    pop esi
26; CHECK-NEXT:    .cfi_def_cfa_offset 4
27; CHECK-NEXT:    ret
28        %tmp.1 = load i64, i64* %X           ; <i64> [#uses=1]
29        %tmp.3 = trunc i64 %tmp.1 to i8         ; <i8> [#uses=1]
30        %shift.upgrd.1 = zext i8 %tmp.3 to i64          ; <i64> [#uses=1]
31        %tmp.4 = shl i64 %x, %shift.upgrd.1             ; <i64> [#uses=1]
32        ret i64 %tmp.4
33}
34
35