blob: e0a7f71ce55bacf236b16e69150a35e2b6d4fe8c [file] [log] [blame]
# RUN: llc -mtriple aarch64-unknown-unknown -O0 -start-before=legalizer -pass-remarks-missed=gisel* %s -o - 2>&1 | FileCheck %s
#
# Check that we fall back on @llvm.aarch64.neon.addp and ensure that we get the
# correct instruction.
# https://bugs.llvm.org/show_bug.cgi?id=40968
--- |
define <2 x float> @foo(<2 x float> %v1, <2 x float> %v2) {
entry:
%v3 = call <2 x float> @llvm.aarch64.neon.addp.v2f32(<2 x float> %v1, <2 x float> %v2)
ret <2 x float> %v3
}
declare <2 x float> @llvm.aarch64.neon.addp.v2f32(<2 x float>, <2 x float>)
...
---
name: foo
alignment: 2
tracksRegLiveness: true
body: |
bb.1.entry:
liveins: $d0, $d1
; CHECK: remark:
; CHECK-SAME: unable to legalize instruction: %2:_(<2 x s32>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.addp), %0:_(<2 x s32>), %1:_(<2 x s32>)
; CHECK: faddp
; CHECK-NOT: addp
%0:_(<2 x s32>) = COPY $d0
%1:_(<2 x s32>) = COPY $d1
%2:_(<2 x s32>) = G_INTRINSIC intrinsic(@llvm.aarch64.neon.addp), %0(<2 x s32>), %1(<2 x s32>)
$d0 = COPY %2(<2 x s32>)
RET_ReallyLR implicit $d0
...