Changeset View
Changeset View
Standalone View
Standalone View
llvm/test/CodeGen/X86/load-combine.ll
Show First 20 Lines • Show All 1,203 Lines • ▼ Show 20 Lines | ; CHECK64-NEXT: retq | ||||
%tmp7 = shl nuw nsw i32 %tmp6, 24 | %tmp7 = shl nuw nsw i32 %tmp6, 24 | ||||
%tmp8 = or i32 %tmp7, %tmp30 | %tmp8 = or i32 %tmp7, %tmp30 | ||||
ret i32 %tmp8 | ret i32 %tmp8 | ||||
} | } | ||||
; i8* p; | ; i8* p; | ||||
; (i32) p[1] | ((i32) p[0] << 8) | ; (i32) p[1] | ((i32) p[0] << 8) | ||||
define i32 @zext_load_i32_by_i8_bswap(i32* %arg) { | define i32 @zext_load_i32_by_i8_bswap(i32* %arg) { | ||||
; CHECK-LABEL: zext_load_i32_by_i8_bswap: | ; BSWAP-LABEL: zext_load_i32_by_i8_bswap: | ||||
; CHECK: # %bb.0: | ; BSWAP: # %bb.0: | ||||
; CHECK-NEXT: movl {{[0-9]+}}(%esp), %eax | ; BSWAP-NEXT: movl {{[0-9]+}}(%esp), %eax | ||||
; CHECK-NEXT: movzwl (%eax), %eax | ; BSWAP-NEXT: movzwl (%eax), %eax | ||||
; CHECK-NEXT: shll $16, %eax | ; BSWAP-NEXT: rolw $8, %ax | ||||
; CHECK-NEXT: bswapl %eax | ; BSWAP-NEXT: movzwl %ax, %eax | ||||
; CHECK-NEXT: retl | ; BSWAP-NEXT: retl | ||||
; | ; | ||||
; CHECK64-LABEL: zext_load_i32_by_i8_bswap: | ; MOVBE-LABEL: zext_load_i32_by_i8_bswap: | ||||
; CHECK64: # %bb.0: | ; MOVBE: # %bb.0: | ||||
; CHECK64-NEXT: movzwl (%rdi), %eax | ; MOVBE-NEXT: movl {{[0-9]+}}(%esp), %eax | ||||
; CHECK64-NEXT: shll $16, %eax | ; MOVBE-NEXT: movbew (%eax), %ax | ||||
; CHECK64-NEXT: bswapl %eax | ; MOVBE-NEXT: movzwl %ax, %eax | ||||
; CHECK64-NEXT: retq | ; MOVBE-NEXT: retl | ||||
; | |||||
; BSWAP64-LABEL: zext_load_i32_by_i8_bswap: | |||||
; BSWAP64: # %bb.0: | |||||
; BSWAP64-NEXT: movzwl (%rdi), %eax | |||||
; BSWAP64-NEXT: rolw $8, %ax | |||||
; BSWAP64-NEXT: movzwl %ax, %eax | |||||
; BSWAP64-NEXT: retq | |||||
; | |||||
; MOVBE64-LABEL: zext_load_i32_by_i8_bswap: | |||||
; MOVBE64: # %bb.0: | |||||
; MOVBE64-NEXT: movbew (%rdi), %ax | |||||
; MOVBE64-NEXT: movzwl %ax, %eax | |||||
; MOVBE64-NEXT: retq | |||||
%tmp = bitcast i32* %arg to i8* | %tmp = bitcast i32* %arg to i8* | ||||
%tmp1 = getelementptr inbounds i8, i8* %tmp, i32 1 | %tmp1 = getelementptr inbounds i8, i8* %tmp, i32 1 | ||||
%tmp2 = load i8, i8* %tmp1, align 1 | %tmp2 = load i8, i8* %tmp1, align 1 | ||||
%tmp3 = zext i8 %tmp2 to i32 | %tmp3 = zext i8 %tmp2 to i32 | ||||
%tmp4 = getelementptr inbounds i8, i8* %tmp, i32 0 | %tmp4 = getelementptr inbounds i8, i8* %tmp, i32 0 | ||||
%tmp5 = load i8, i8* %tmp4, align 1 | %tmp5 = load i8, i8* %tmp4, align 1 | ||||
%tmp6 = zext i8 %tmp5 to i32 | %tmp6 = zext i8 %tmp5 to i32 | ||||
%tmp7 = shl nuw nsw i32 %tmp6, 8 | %tmp7 = shl nuw nsw i32 %tmp6, 8 | ||||
▲ Show 20 Lines • Show All 71 Lines • Show Last 20 Lines |