1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00
llvm-mirror/test/CodeGen/X86/pr30813.ll
Matt Arsenault b7b3e8e261 RegAllocFast: Record internal state based on register units
Record internal state based on register units. This is often more
efficient as there are typically fewer register units to update
compared to iterating over all the aliases of a register.

Original patch by Matthias Braun, but I've been rebasing and fixing it
for almost 2 years and fixed a few bugs causing intermediate failures
to make this patch independent of the changes in
https://reviews.llvm.org/D52010.
2020-06-03 16:51:46 -04:00

27 lines
914 B
LLVM

; RUN: llc -mtriple=x86_64-linux-gnu -O0 %s -o - | FileCheck %s
; CHECK: patatino:
; CHECK: .cfi_startproc
; CHECK: movzwl (%rax), %e[[REG0:[abcd]x]]
; CHECK: movq %r[[REG0]], ({{%r[abcd]x}})
; CHECK: retq
define void @patatino() {
%tmp = load i16, i16* undef, align 8
%conv18098 = sext i16 %tmp to i64
%and1 = and i64 %conv18098, -1
%cmp = icmp ult i64 -1, undef
%conv = sext i1 %cmp to i64
%load1 = load i48, i48* undef, align 8
%bf.cast18158 = sext i48 %load1 to i64
%conv18159 = trunc i64 %bf.cast18158 to i32
%conv18160 = sext i32 %conv18159 to i64
%div18162 = udiv i64 %conv, %conv18160
%and18163 = and i64 %conv18098, %div18162
%shr18164 = lshr i64 %and1, %and18163
%conv18165 = trunc i64 %shr18164 to i16
%conv18166 = zext i16 %conv18165 to i64
store i64 %conv18166, i64* undef, align 8
store i48 undef, i48* undef, align 8
ret void
}