1 # RUN: llc -run-pass arm-ldst-opt -verify-machineinstrs %s -o - | FileCheck %s
2 # ARM load store optimizer was dealing with a sequence like:
3 # s1 = VLDRS [r0, 1], Q0<imp-def>
4 # s3 = VLDRS [r0, 2], Q0<imp-use,kill>, Q0<imp-def>
5 # s0 = VLDRS [r0, 0], Q0<imp-use,kill>, Q0<imp-def>
6 # s2 = VLDRS [r0, 4], Q0<imp-use,kill>, Q0<imp-def>
8 # It decided to combine the {s0, s1} loads into a single instruction in the
9 # third position. However, this leaves the instruction defining s3 with a stray
10 # imp-use of Q0, which is undefined.
12 # The verifier catches this, so this test just makes sure that appropriate
13 # liveness flags are added.
15 target triple = "thumbv7-apple-ios"
16 define arm_aapcs_vfpcc <4 x float> @foo(float* %ptr) {
29 %s1 = VLDRS %r0, 1, 14, _, implicit-def %q0 :: (load 4)
30 %s3 = VLDRS %r0, 2, 14, _, implicit killed %q0, implicit-def %q0 :: (load 4)
31 ; CHECK: %s3 = VLDRS %r0, 2, 14, _, implicit killed undef %q0, implicit-def %q0 :: (load 4)
33 %s0 = VLDRS %r0, 0, 14, _, implicit killed %q0, implicit-def %q0 :: (load 4)
34 ; CHECK: VLDMSIA %r0, 14, _, def %s0, def %s1, implicit-def _
36 %s2 = VLDRS killed %r0, 4, 14, _, implicit killed %q0, implicit-def %q0 :: (load 4)
37 ; CHECK: %s2 = VLDRS killed %r0, 4, 14, _, implicit killed %q0, implicit-def %q0 :: (load 4)
39 tBX_RET 14, _, implicit %q0