llvm-6502/test/CodeGen/R600/mul_uint24-i64.ll
Tom Stellard 5c9bb7119a R600: Match 24-bit arithmetic patterns in a Target DAGCombine
Moving these patterns from TableGen files to PerformDAGCombine()
should allow us to generate better code by eliminating unnecessary
shifts and extensions earlier.

This also fixes a bug where the MAD pattern was calling
SimplifyDemandedBits with a 24-bit mask on the first operand
even when the full pattern wasn't being matched.  This occasionally
resulted in some instructions being incorrectly deleted from the
program.

v2:
  - Fix bug with 64-bit mul

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205731 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-07 19:45:41 +00:00

25 lines
806 B
LLVM

; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s --check-prefix=EG --check-prefix=FUNC
; RUN: llc < %s -march=r600 -mcpu=cayman | FileCheck %s --check-prefix=EG --check-prefix=FUNC
; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck %s --check-prefix=SI --check-prefix=FUNC
; FIXME: Move this test into mul_uint24.ll once i64 mul is supported.
; XFAIL: *
; Multiply with 24-bit inputs and 64-bit output
; FUNC_LABEL: @mul24_i64
; EG; MUL_UINT24
; EG: MULHI
; SI: V_MUL_U32_U24
; FIXME: SI support 24-bit mulhi
; SI: V_MUL_HI_U32
define void @mul24_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) {
entry:
%0 = shl i64 %a, 40
%a_24 = lshr i64 %0, 40
%1 = shl i64 %b, 40
%b_24 = lshr i64 %1, 40
%2 = mul i64 %a_24, %b_24
store i64 %2, i64 addrspace(1)* %out
ret void
}