mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 04:33:05 +00:00
ca2dd36c39
A register can be associated with several distinct register classes. For example, on PPC, the floating point registers are each associated with both F4RC (which holds f32) and F8RC (which holds f64). As a result, this code would fail when provided with a floating point register and an f64 operand because it would happen to find the register in the F4RC class first and return that. From the F4RC class, SDAG would extract f32 as the register type and then assert because of the invalid implied conversion between the f64 value and the f32 register. Instead, search all register classes. If a register class containing the the requested register has the requested type, then return that register class. Otherwise, as before, return the first register class found that contains the requested register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170436 91177308-0d34-0410-b5e6-96231b3b80d8
23 lines
778 B
LLVM
23 lines
778 B
LLVM
; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu | FileCheck %s
|
|
|
|
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64"
|
|
target triple = "powerpc64-bgq-linux"
|
|
|
|
define void @_Z15quad_copy_1024nPcS_m() nounwind {
|
|
; CHECK: @_Z15quad_copy_1024nPcS_m
|
|
|
|
entry:
|
|
br i1 undef, label %short_msg, label %if.end
|
|
|
|
if.end: ; preds = %entry
|
|
%0 = tail call double* asm sideeffect "qvstfdux $2,$0,$1", "=b,{r7},{f11},0,~{memory}"(i32 64, double undef, double* undef) nounwind, !srcloc !0
|
|
unreachable
|
|
|
|
; CHECK: qvstfdux 11,{{[0-9]+}},7
|
|
|
|
short_msg: ; preds = %entry
|
|
ret void
|
|
}
|
|
|
|
!0 = metadata !{i32 -2147422199}
|