blob: 288e2921daae57a612a0651d2b69e9a22260e537 [file] [log] [blame]
; NOTE: Assertions have been autogenerated by utils/
; RUN: llc < %s | FileCheck %s
; Check that the isel does not fold the shld, which already folds a load
; and has two uses, into a store.
target triple = "i686-unknown-unknown"
@A = external global i32
define i32 @test5(i32 %B, i8 %C) {
; CHECK-LABEL: test5:
; CHECK: # %bb.0:
; CHECK-NEXT: movb {{[0-9]+}}(%esp), %cl
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %edx
; CHECK-NEXT: movl A, %eax
; CHECK-NEXT: shldl %cl, %edx, %eax
; CHECK-NEXT: movl %eax, A
; CHECK-NEXT: retl
%tmp.1 = load i32, i32* @A
%shift.upgrd.1 = zext i8 %C to i32
%tmp.2 = shl i32 %tmp.1, %shift.upgrd.1
%tmp.3 = sub i8 32, %C
%shift.upgrd.2 = zext i8 %tmp.3 to i32
%tmp.4 = lshr i32 %B, %shift.upgrd.2
%tmp.5 = or i32 %tmp.4, %tmp.2
store i32 %tmp.5, i32* @A
ret i32 %tmp.5