brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · a9eda31 Raw
80 lines · plain
1; RUN: llc -mtriple=armv7a -mattr=+hwdiv-arm %s -o - | FileCheck %s --check-prefixes=CHECK,DIV2; RUN: llc -mtriple=armv7a -mattr=-hwdiv-arm %s -o - | FileCheck %s --check-prefixes=CHECK,NODIV3 4; Check SREM5define dso_local i32 @test_rem(i32 %F) local_unnamed_addr #0 {6; CHECK-LABEL: test_rem 7; CHECK:       asr   r1, r0, #318; CHECK-NEXT:  add   r1, r0, r1, lsr #309; CHECK-NEXT:  bic   r1, r1, #310; CHECK-NEXT:  sub   r0, r0, r111 12entry:13  %div = srem i32 %F, 414  ret i32 %div15}16 17; Try an i16 sdiv, with a small immediate.18define dso_local signext i16 @f0(i16 signext %F) local_unnamed_addr #0 {19; CHECK-LABEL: f020 21; DIV:         mov     r1, #222; DIV-NEXT:    sdiv    r0, r0, r123; DIV-NEXT:    sxth    r0, r024; DIV-NEXT:    bx      lr25 26; NODIV:       uxth r1, r027; NODIV-NEXT:  add  r0, r0, r1, lsr #1528; NODIV-NEXT:  sxth r0, r029; NODIV-NEXT:  asr  r0, r0, #130; NODIV-NEXT:  bx   lr31 32entry:33  %0 = sdiv i16 %F, 234  ret i16 %035}36 37; Try an i32 sdiv, with a small immediate.38define dso_local i32 @f1(i32 %F) local_unnamed_addr #0 {39; CHECK-LABEL: f140 41; DIV:       mov     r1, #442; DIV-NEXT:  sdiv    r0, r0, r143; DIV-NEXT:  bx      lr44 45; NODIV:       asr  r1, r0, #3146; NODIV-NEXT:  add  r0, r0, r1, lsr #3047; NODIV-NEXT:  asr  r0, r0, #248; NODIV-NEXT:  bx	  lr49 50entry:51  %div = sdiv i32 %F, 452  ret i32 %div53}54 55; Try a large power of 2 immediate, which should also be materialised with 156; move immediate instruction.57define dso_local i32 @f2(i32 %F) local_unnamed_addr #0 {58; CHECK-LABEL:  f259; DIV:        mov r1, #13107260; DIV-NEXT:   sdiv  r0, r0, r161; DIV-NEXT:   bx  lr62entry:63  %div = sdiv i32 %F, 13107264  ret i32 %div65}66 67; MinSize not set, so should expand to the faster but longer sequence.68define dso_local i32 @f3(i32 %F) {69; CHECK-LABEL: f370; CHECK:       asr r1, r0, #3171; CHECK-NEXT:  add r0, r0, r1, lsr #3072; CHECK-NEXT:  asr r0, r0, #273; CHECK-NEXT:  bx  lr74entry:75  %div = sdiv i32 %F, 476  ret i32 %div77}78 79attributes #0 = { minsize norecurse nounwind optsize readnone }80