<commit_before>; RUN: llc < %s -mcpu=swift -mtriple=armv7s-apple-ios | FileCheck %s

; vldm with registers not aligned with q registers need more micro-ops so that
; so that there usage becomes unbeneficial on swift.

; CHECK-LABEL: test_vldm
; CHECK: vldmia r{{[0-9]+}}, {d2, d3, d4}
; CHECK-NOT: vldmia r{{[0-9]+}}, {d1, d2, d3, d4}

declare fastcc void @force_register(double %d0, double %d1, double %d2, double %d3, double %d4) 

define void @test_vldm(double* %x, double * %y) {
entry:
  %addr1 = getelementptr double * %x, i32 1
  %addr2 = getelementptr double * %x, i32 2
  %addr3 = getelementptr double * %x, i32 3
  %d0 = load double * %y
  %d1 = load double * %x
  %d2 = load double * %addr1
  %d3 = load double * %addr2
  %d4 = load double * %addr3
  ; We are trying to force x[0-3] in register d1 to d4 so that we can test we
  ; don't form a "vldmia rX, {d1, d2, d3, d4}".
  ; We are relying on the calling convention and that register allocation
  ; properly coalesces registers.
  call fastcc void @force_register(double %d0, double %d1, double %d2, double %d3, double %d4)
  ret void
}<commit_msg>Expand and rewrite comment.<commit_after>; RUN: llc < %s -mcpu=swift -mtriple=armv7s-apple-ios | FileCheck %s

; Check that we avoid producing vldm instructions using d registers that
; begin in the most-significant half of a q register. These require more
; micro-ops on swift and so aren't worth combining.

; CHECK-LABEL: test_vldm
; CHECK: vldmia r{{[0-9]+}}, {d2, d3, d4}
; CHECK-NOT: vldmia r{{[0-9]+}}, {d1, d2, d3, d4}

declare fastcc void @force_register(double %d0, double %d1, double %d2, double %d3, double %d4) 

define void @test_vldm(double* %x, double * %y) {
entry:
  %addr1 = getelementptr double * %x, i32 1
  %addr2 = getelementptr double * %x, i32 2
  %addr3 = getelementptr double * %x, i32 3
  %d0 = load double * %y
  %d1 = load double * %x
  %d2 = load double * %addr1
  %d3 = load double * %addr2
  %d4 = load double * %addr3
  ; We are trying to force x[0-3] in registers d1 to d4 so that we can test we
  ; don't form a "vldmia rX, {d1, d2, d3, d4}".
  ; We are relying on the calling convention and that register allocation
  ; properly coalesces registers.
  call fastcc void @force_register(double %d0, double %d1, double %d2, double %d3, double %d4)
  ret void
}
{'fraction_non_alphanumeric': 0.12527091460771564, 'fraction_numerical': 0.043346337234503686, 'mean_word_length': 3.788381742738589, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2111514', 'n_tokens_mistral': 910, 'n_tokens_neox': 872, 'n_words': 327}