brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.3 KiB · 97cd9fd Raw
202 lines · plain
1; RUN: llc < %s -mtriple=arm-apple-ios -mcpu=cortex-a8      | \2; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-SWDIV3; RUN: llc < %s -mtriple=arm-apple-ios -mcpu=swift          | \4; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-HWDIV-ARM-OR-THUMB25; RUN: llc < %s -mtriple=arm-apple-ios -mcpu=cortex-r4      | \6; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-SWDIV7; RUN: llc < %s -mtriple=arm-apple-ios -mcpu=cortex-r4f     | \8; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-SWDIV9; RUN: llc < %s -mtriple=arm-apple-ios -mcpu=cortex-r5      | \10; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-HWDIV-ARM-OR-THUMB211; RUN: llc < %s -mtriple=arm-none-eabi -mcpu=cortex-a8      | \12; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-EABI13; RUN: llc < %s -mtriple=armv7 -mcpu=cortex-a7              | \14; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-HWDIV-ARM-OR-THUMB215; RUN: llc < %s -mtriple=armv7 -mcpu=cortex-a7 -march=thumb | \16; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-THUMB,CHECK-HWDIV-ARM-OR-THUMB217; RUN: llc %s -o - -mtriple=thumbv8m.main -mcpu=cortex-m33  | \18; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-THUMB,CHECK-HWDIV-ARM-OR-THUMB219; RUN: llc < %s -mtriple=thumbv8m.base -mcpu=cortex-m23     | \20; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-THUMB,CHECK-HWDIV-THUMB121; RUN: llc < %s -mtriple=armv7ve-none-linux-gnu             | \22; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV23; RUN: llc < %s -mtriple=thumbv7ve-none-linux-gnu           | \24; RUN:     FileCheck %s -check-prefixes=CHECK,CHECK-HWDIV,CHECK-THUMB25 26define i32 @f1(i32 %a, i32 %b) {27entry:28; CHECK-LABEL: f129; CHECK-SWDIV: __divsi330 31; CHECK-THUMB: .thumb_func32; CHECK-HWDIV: sdiv33 34; CHECK-EABI: __aeabi_idiv35        %tmp1 = sdiv i32 %a, %b         ; <i32> [#uses=1]36        ret i32 %tmp137}38 39define i32 @f2(i32 %a, i32 %b) {40entry:41; CHECK-LABEL: f242; CHECK-SWDIV: __udivsi343 44; CHECK-THUMB: .thumb_func45; CHECK-HWDIV: udiv46 47; CHECK-EABI: __aeabi_uidiv48        %tmp1 = udiv i32 %a, %b         ; <i32> [#uses=1]49        ret i32 %tmp150}51 52define i32 @f3(i32 %a, i32 %b) {53entry:54; CHECK-LABEL: f355; CHECK-SWDIV: __modsi356 57; CHECK-THUMB: .thumb_func58; CHECK-HWDIV: sdiv59; CHECK-HWDIV-ARM-OR-THUMB2-NEXT: mls60; CHECK-HWDIV-THUMB1-NEXT: muls61; CHECK-HWDIV-THUMB1-NEXT: subs62 63; EABI MODE = Remainder in R1, quotient in R064; CHECK-EABI: __aeabi_idivmod65; CHECK-EABI-NEXT: mov r0, r166        %tmp1 = srem i32 %a, %b         ; <i32> [#uses=1]67        ret i32 %tmp168}69 70define i32 @f4(i32 %a, i32 %b) {71entry:72; CHECK-LABEL: f473; CHECK-SWDIV: __umodsi374 75; CHECK-THUMB: .thumb_func76; CHECK-HWDIV: udiv77; CHECK-HWDIV-ARM-OR-THUMB2-NEXT: mls78; CHECK-HWDIV-THUMB1-NEXT: muls79; CHECK-HWDIV-THUMB1-NEXT: subs80 81; EABI MODE = Remainder in R1, quotient in R082; CHECK-EABI: __aeabi_uidivmod83; CHECK-EABI-NEXT: mov r0, r184        %tmp1 = urem i32 %a, %b         ; <i32> [#uses=1]85        ret i32 %tmp186}87 88 89define i64 @f5(i64 %a, i64 %b) {90entry:91; CHECK-LABEL: f592; CHECK-SWDIV: __moddi393 94; CHECK-HWDIV: __moddi395 96; EABI MODE = Remainder in R2-R3, quotient in R0-R197; CHECK-EABI: __aeabi_ldivmod98; CHECK-EABI-NEXT: mov r0, r299; CHECK-EABI-NEXT: mov r1, r3100        %tmp1 = srem i64 %a, %b         ; <i64> [#uses=1]101        ret i64 %tmp1102}103 104define i64 @f6(i64 %a, i64 %b) {105entry:106; CHECK-LABEL: f6107; CHECK-SWDIV: __umoddi3108 109; CHECK-HWDIV: __umoddi3110 111; EABI MODE = Remainder in R2-R3, quotient in R0-R1112; CHECK-EABI: __aeabi_uldivmod113; CHECK-EABI-NEXT: mov r0, r2114; CHECK-EABI-NEXT: mov r1, r3115        %tmp1 = urem i64 %a, %b         ; <i64> [#uses=1]116        ret i64 %tmp1117}118 119; Make sure we avoid a libcall for some constants.120define i64 @f7(i64 %a) {121; CHECK-LABEL: f7122; CHECK-SWDIV: adc123; CHECK-SWDIV: umull124; CHECK-HWDIV-ARM-OR-THUMB2: adc125; CHECK-HWDIV-ARM-OR-THUMB2: umull126; CHECK-EABI: adc127; CHECK-EABI: umull128; No 32-bit => 64-bit HW multiply instruction prevents optimisation129; CHECK-HWDIV-THUMB1: __umoddi3130  %tmp1 = urem i64 %a, 3131  ret i64 %tmp1132}133 134; Make sure we avoid a libcall for some constants.135define i64 @f8(i64 %a) {136; CHECK-LABEL: f8137; CHECK-SWDIV: adc138; CHECK-SWDIV: umull139; CHECK-HWDIV-ARM-OR-THUMB2: adc140; CHECK-HWDIV-ARM-OR-THUMB2: umull141; CHECK-EABI: adc142; CHECK-EABI: umull143; No 32-bit => 64-bit HW multiply instruction prevents optimisation144; CHECK-HWDIV-THUMB1: __udivdi3145  %tmp1 = udiv i64 %a, 3146  ret i64 %tmp1147}148 149define i8 @sdiv_i8(i8 %a, i8 %b) {150entry:151; CHECK-LABEL: sdiv_i8152; CHECK-SWDIV: __divsi3153 154; CHECK-THUMB: .thumb_func155; CHECK-HWDIV: sdiv156 157; CHECK-EABI: __aeabi_idiv158        %tmp1 = sdiv i8 %a, %b         ; <i8> [#uses=1]159        ret i8 %tmp1160}161 162 163define i16 @sdiv_i16(i16 %a, i16 %b) {164entry:165; CHECK-LABEL: sdiv_i16166; CHECK-SWDIV: __divsi3167 168; CHECK-THUMB: .thumb_func169; CHECK-HWDIV: sdiv170 171; CHECK-EABI: __aeabi_idiv172        %tmp1 = sdiv i16 %a, %b         ; <i16> [#uses=1]173        ret i16 %tmp1174}175 176define i8 @udiv_i8(i8 %a, i8 %b) {177entry:178; CHECK-LABEL: udiv_i8179; CHECK-SWDIV: __udivsi3180 181; CHECK-THUMB: .thumb_func182; CHECK-HWDIV: udiv183 184; CHECK-EABI: __aeabi_uidiv185        %tmp1 = udiv i8 %a, %b         ; <i8> [#uses=1]186        ret i8 %tmp1187}188 189 190define i16 @udiv_i16(i16 %a, i16 %b) {191entry:192; CHECK-LABEL: udiv_i16193; CHECK-SWDIV: __udivsi3194 195; CHECK-THUMB: .thumb_func196; CHECK-HWDIV: udiv197 198; CHECK-EABI: __aeabi_uidiv199        %tmp1 = udiv i16 %a, %b         ; <i16> [#uses=1]200        ret i16 %tmp1201}202