293 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=hexagon -mcpu=hexagonv5 < %s | FileCheck %s3 4;---------------------------------------------------------------------5; fast sqrt6;---------------------------------------------------------------------7 8define float @fast_sqrt_f32(float %x) {9; CHECK-LABEL: fast_sqrt_f32:10; CHECK: .cfi_startproc11; CHECK-NEXT: // %bb.0:12; CHECK-NEXT: {13; CHECK-NEXT: jump __hexagon_fast2_sqrtf14; CHECK-NEXT: }15 %result = call nnan ninf nsz afn float @llvm.sqrt.f32(float %x)16 ret float %result17}18 19define double @fast_sqrt_f64(double %x) {20; CHECK-LABEL: fast_sqrt_f64:21; CHECK: .cfi_startproc22; CHECK-NEXT: // %bb.0:23; CHECK-NEXT: {24; CHECK-NEXT: jump __hexagon_fast2_sqrtdf225; CHECK-NEXT: }26 %result = call nnan ninf nsz afn double @llvm.sqrt.f64(double %x)27 ret double %result28}29 30;---------------------------------------------------------------------31; fast fadd32;---------------------------------------------------------------------33 34define float @fast_add_f32(float %x, float %y) {35; CHECK-LABEL: fast_add_f32:36; CHECK: .cfi_startproc37; CHECK-NEXT: // %bb.0:38; CHECK-NEXT: {39; CHECK-NEXT: r0 = sfadd(r0,r1)40; CHECK-NEXT: jumpr r3141; CHECK-NEXT: }42 %result = fadd nnan ninf nsz afn float %x, %y43 ret float %result44}45 46define double @fast_add_f64(double %x, double %y) {47; CHECK-LABEL: fast_add_f64:48; CHECK: .cfi_startproc49; CHECK-NEXT: // %bb.0:50; CHECK-NEXT: {51; CHECK-NEXT: jump __hexagon_fast_adddf352; CHECK-NEXT: }53 %result = fadd nnan ninf nsz afn double %x, %y54 ret double %result55}56 57;---------------------------------------------------------------------58; fast fsub59;---------------------------------------------------------------------60 61define float @fast_sub_f32(float %x, float %y) {62; CHECK-LABEL: fast_sub_f32:63; CHECK: .cfi_startproc64; CHECK-NEXT: // %bb.0:65; CHECK-NEXT: {66; CHECK-NEXT: r0 = sfsub(r0,r1)67; CHECK-NEXT: jumpr r3168; CHECK-NEXT: }69 %result = fsub nnan ninf nsz afn float %x, %y70 ret float %result71}72 73define double @fast_sub_f64(double %x, double %y) {74; CHECK-LABEL: fast_sub_f64:75; CHECK: .cfi_startproc76; CHECK-NEXT: // %bb.0:77; CHECK-NEXT: {78; CHECK-NEXT: jump __hexagon_fast_subdf379; CHECK-NEXT: }80 %result = fsub nnan ninf nsz afn double %x, %y81 ret double %result82}83 84;---------------------------------------------------------------------85; fast fmul86;---------------------------------------------------------------------87 88define float @fast_mul_f32(float %x, float %y) {89; CHECK-LABEL: fast_mul_f32:90; CHECK: .cfi_startproc91; CHECK-NEXT: // %bb.0:92; CHECK-NEXT: {93; CHECK-NEXT: r0 = sfmpy(r0,r1)94; CHECK-NEXT: jumpr r3195; CHECK-NEXT: }96 %result = fmul nnan ninf nsz afn float %x, %y97 ret float %result98}99 100define double @fast_mul_f64(double %x, double %y) {101; CHECK-LABEL: fast_mul_f64:102; CHECK: .cfi_startproc103; CHECK-NEXT: // %bb.0:104; CHECK-NEXT: {105; CHECK-NEXT: jump __hexagon_fast_muldf3106; CHECK-NEXT: }107 %result = fmul nnan ninf nsz afn double %x, %y108 ret double %result109}110 111;---------------------------------------------------------------------112; fast fdiv113;---------------------------------------------------------------------114 115define float @fast_div_f32(float %x, float %y) {116; CHECK-LABEL: fast_div_f32:117; CHECK: .cfi_startproc118; CHECK-NEXT: // %bb.0:119; CHECK-NEXT: {120; CHECK-NEXT: r2 = sffixupn(r0,r1)121; CHECK-NEXT: r4,p0 = sfrecipa(r0,r1)122; CHECK-NEXT: r5 = ##1065353216123; CHECK-NEXT: }124; CHECK-NEXT: {125; CHECK-NEXT: r1 = sffixupd(r0,r1)126; CHECK-NEXT: r6 = ##1065353216127; CHECK-NEXT: }128; CHECK-NEXT: {129; CHECK-NEXT: r5 -= sfmpy(r1,r4):lib130; CHECK-NEXT: r0 = and(r2,##-2147483648)131; CHECK-NEXT: r3 = r2132; CHECK-NEXT: }133; CHECK-NEXT: {134; CHECK-NEXT: r4 += sfmpy(r5,r4):lib135; CHECK-NEXT: }136; CHECK-NEXT: {137; CHECK-NEXT: r0 += sfmpy(r2,r4):lib138; CHECK-NEXT: r6 -= sfmpy(r1,r4):lib139; CHECK-NEXT: }140; CHECK-NEXT: {141; CHECK-NEXT: r3 -= sfmpy(r1,r0):lib142; CHECK-NEXT: r4 += sfmpy(r6,r4):lib143; CHECK-NEXT: }144; CHECK-NEXT: {145; CHECK-NEXT: r0 += sfmpy(r3,r4):lib146; CHECK-NEXT: }147; CHECK-NEXT: {148; CHECK-NEXT: r2 -= sfmpy(r0,r1):lib149; CHECK-NEXT: }150; CHECK-NEXT: {151; CHECK-NEXT: r0 += sfmpy(r2,r4,p0):scale152; CHECK-NEXT: jumpr r31153; CHECK-NEXT: }154 %result = fdiv nnan ninf nsz afn float %x, %y155 ret float %result156}157 158define double @fast_div_f64(double %x, double %y) {159; CHECK-LABEL: fast_div_f64:160; CHECK: .cfi_startproc161; CHECK-NEXT: // %bb.0:162; CHECK-NEXT: {163; CHECK-NEXT: jump __hexagon_fast_divdf3164; CHECK-NEXT: }165 %result = fdiv nnan ninf nsz afn double %x, %y166 ret double %result167}168 169;---------------------------------------------------------------------170; Negative tests sqrt171;---------------------------------------------------------------------172 173; TODO: What flags do we really need here?174define float @sqrt_f32__afn(float %x) {175; CHECK-LABEL: sqrt_f32__afn:176; CHECK: .cfi_startproc177; CHECK-NEXT: // %bb.0:178; CHECK-NEXT: {179; CHECK-NEXT: jump __hexagon_sqrtf180; CHECK-NEXT: }181 %result = call afn float @llvm.sqrt.f32(float %x)182 ret float %result183}184 185define float @sqrt_f32__afn_ninf(float %x) {186; CHECK-LABEL: sqrt_f32__afn_ninf:187; CHECK: .cfi_startproc188; CHECK-NEXT: // %bb.0:189; CHECK-NEXT: {190; CHECK-NEXT: jump __hexagon_sqrtf191; CHECK-NEXT: }192 %result = call afn ninf float @llvm.sqrt.f32(float %x)193 ret float %result194}195 196define float @sqrt_f32__afn_nnan(float %x) {197; CHECK-LABEL: sqrt_f32__afn_nnan:198; CHECK: .cfi_startproc199; CHECK-NEXT: // %bb.0:200; CHECK-NEXT: {201; CHECK-NEXT: jump __hexagon_sqrtf202; CHECK-NEXT: }203 %result = call afn nnan float @llvm.sqrt.f32(float %x)204 ret float %result205}206 207define float @sqrt_f32__nnan(float %x) {208; CHECK-LABEL: sqrt_f32__nnan:209; CHECK: .cfi_startproc210; CHECK-NEXT: // %bb.0:211; CHECK-NEXT: {212; CHECK-NEXT: jump __hexagon_sqrtf213; CHECK-NEXT: }214 %result = call nnan float @llvm.sqrt.f32(float %x)215 ret float %result216}217 218define float @sqrt_f32_nnan_ninf_afn(float %x) {219; CHECK-LABEL: sqrt_f32_nnan_ninf_afn:220; CHECK: .cfi_startproc221; CHECK-NEXT: // %bb.0:222; CHECK-NEXT: {223; CHECK-NEXT: jump __hexagon_sqrtf224; CHECK-NEXT: }225 %result = call nnan ninf afn float @llvm.sqrt.f32(float %x)226 ret float %result227}228 229;---------------------------------------------------------------------230; Negative tests fadd231;---------------------------------------------------------------------232 233; TODO: What flags do we really need here?234define float @fadd_f32_afn(float %x, float %y) {235; CHECK-LABEL: fadd_f32_afn:236; CHECK: .cfi_startproc237; CHECK-NEXT: // %bb.0:238; CHECK-NEXT: {239; CHECK-NEXT: r0 = sfadd(r0,r1)240; CHECK-NEXT: jumpr r31241; CHECK-NEXT: }242 %result = fadd afn float %x, %y243 ret float %result244}245 246define float @fadd_f32__afn_ninf(float %x, float %y) {247; CHECK-LABEL: fadd_f32__afn_ninf:248; CHECK: .cfi_startproc249; CHECK-NEXT: // %bb.0:250; CHECK-NEXT: {251; CHECK-NEXT: r0 = sfadd(r0,r1)252; CHECK-NEXT: jumpr r31253; CHECK-NEXT: }254 %result = fadd afn ninf float %x, %y255 ret float %result256}257 258define float @fadd_f32__afn_nnan(float %x, float %y) {259; CHECK-LABEL: fadd_f32__afn_nnan:260; CHECK: .cfi_startproc261; CHECK-NEXT: // %bb.0:262; CHECK-NEXT: {263; CHECK-NEXT: r0 = sfadd(r0,r1)264; CHECK-NEXT: jumpr r31265; CHECK-NEXT: }266 %result = fadd afn nnan float %x, %y267 ret float %result268}269 270define float @fadd_f32__nnan(float %x, float %y) {271; CHECK-LABEL: fadd_f32__nnan:272; CHECK: .cfi_startproc273; CHECK-NEXT: // %bb.0:274; CHECK-NEXT: {275; CHECK-NEXT: r0 = sfadd(r0,r1)276; CHECK-NEXT: jumpr r31277; CHECK-NEXT: }278 %result = fadd nnan float %x, %y279 ret float %result280}281 282define float @fadd_f32__nnan_ninf_afn(float %x, float %y) {283; CHECK-LABEL: fadd_f32__nnan_ninf_afn:284; CHECK: .cfi_startproc285; CHECK-NEXT: // %bb.0:286; CHECK-NEXT: {287; CHECK-NEXT: r0 = sfadd(r0,r1)288; CHECK-NEXT: jumpr r31289; CHECK-NEXT: }290 %result = fadd nnan ninf afn float %x, %y291 ret float %result292}293