457 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -enable-ppc-gen-scalar-mass -verify-machineinstrs -O3 -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck --check-prefix=CHECK-LNX %s3; RUN: llc -enable-ppc-gen-scalar-mass -verify-machineinstrs -O3 -mtriple=powerpc-ibm-aix-xcoff < %s | FileCheck --check-prefix=CHECK-AIX %s4 5declare float @powf (float, float);6declare double @pow (double, double);7declare float @__powf_finite (float, float);8declare double @__pow_finite (double, double);9 10; fast-math powf with 0.2511define float @powf_f32_fast025(float %a) #1 {12;13; CHECK-LNX-LABEL: powf_f32_fast025:14; CHECK-LNX: # %bb.0: # %entry15; CHECK-LNX-NEXT: mflr 016; CHECK-LNX-NEXT: stdu 1, -32(1)17; CHECK-LNX-NEXT: std 0, 48(1)18; CHECK-LNX-NEXT: .cfi_def_cfa_offset 3219; CHECK-LNX-NEXT: .cfi_offset lr, 1620; CHECK-LNX-NEXT: addis 3, 2, .LCPI0_0@toc@ha21; CHECK-LNX-NEXT: lfs 2, .LCPI0_0@toc@l(3)22; CHECK-LNX-NEXT: bl __xl_powf_finite23; CHECK-LNX-NEXT: nop24; CHECK-LNX-NEXT: addi 1, 1, 3225; CHECK-LNX-NEXT: ld 0, 16(1)26; CHECK-LNX-NEXT: mtlr 027; CHECK-LNX-NEXT: blr28;29; CHECK-AIX-LABEL: powf_f32_fast025:30; CHECK-AIX: # %bb.0: # %entry31; CHECK-AIX-NEXT: mflr 032; CHECK-AIX-NEXT: stwu 1, -64(1)33; CHECK-AIX-NEXT: lwz 3, L..C0(2) # %const.034; CHECK-AIX-NEXT: stw 0, 72(1)35; CHECK-AIX-NEXT: lfs 2, 0(3)36; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]37; CHECK-AIX-NEXT: nop38; CHECK-AIX-NEXT: addi 1, 1, 6439; CHECK-AIX-NEXT: lwz 0, 8(1)40; CHECK-AIX-NEXT: mtlr 041; CHECK-AIX-NEXT: blr42entry:43 %call = tail call nnan ninf afn nsz float @powf(float %a, float 2.500000e-01)44 ret float %call45}46 47; fast-math pow with 0.2548define double @pow_f64_fast025(double %a) #1 {49;50; CHECK-LNX-LABEL: pow_f64_fast025:51; CHECK-LNX: # %bb.0: # %entry52; CHECK-LNX-NEXT: mflr 053; CHECK-LNX-NEXT: stdu 1, -32(1)54; CHECK-LNX-NEXT: std 0, 48(1)55; CHECK-LNX-NEXT: .cfi_def_cfa_offset 3256; CHECK-LNX-NEXT: .cfi_offset lr, 1657; CHECK-LNX-NEXT: addis 3, 2, .LCPI1_0@toc@ha58; CHECK-LNX-NEXT: lfs 2, .LCPI1_0@toc@l(3)59; CHECK-LNX-NEXT: bl __xl_pow_finite60; CHECK-LNX-NEXT: nop61; CHECK-LNX-NEXT: addi 1, 1, 3262; CHECK-LNX-NEXT: ld 0, 16(1)63; CHECK-LNX-NEXT: mtlr 064; CHECK-LNX-NEXT: blr65;66; CHECK-AIX-LABEL: pow_f64_fast025:67; CHECK-AIX: # %bb.0: # %entry68; CHECK-AIX-NEXT: mflr 069; CHECK-AIX-NEXT: stwu 1, -64(1)70; CHECK-AIX-NEXT: lwz 3, L..C1(2) # %const.071; CHECK-AIX-NEXT: stw 0, 72(1)72; CHECK-AIX-NEXT: lfs 2, 0(3)73; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]74; CHECK-AIX-NEXT: nop75; CHECK-AIX-NEXT: addi 1, 1, 6476; CHECK-AIX-NEXT: lwz 0, 8(1)77; CHECK-AIX-NEXT: mtlr 078; CHECK-AIX-NEXT: blr79entry:80 %call = tail call nnan ninf afn nsz double @pow(double %a, double 2.500000e-01)81 ret double %call82}83 84; fast-math powf with 0.7585define float @powf_f32_fast075(float %a) #1 {86;87; CHECK-LNX-LABEL: powf_f32_fast075:88; CHECK-LNX: # %bb.0: # %entry89; CHECK-LNX-NEXT: mflr 090; CHECK-LNX-NEXT: stdu 1, -32(1)91; CHECK-LNX-NEXT: std 0, 48(1)92; CHECK-LNX-NEXT: .cfi_def_cfa_offset 3293; CHECK-LNX-NEXT: .cfi_offset lr, 1694; CHECK-LNX-NEXT: addis 3, 2, .LCPI2_0@toc@ha95; CHECK-LNX-NEXT: lfs 2, .LCPI2_0@toc@l(3)96; CHECK-LNX-NEXT: bl __xl_powf_finite97; CHECK-LNX-NEXT: nop98; CHECK-LNX-NEXT: addi 1, 1, 3299; CHECK-LNX-NEXT: ld 0, 16(1)100; CHECK-LNX-NEXT: mtlr 0101; CHECK-LNX-NEXT: blr102;103; CHECK-AIX-LABEL: powf_f32_fast075:104; CHECK-AIX: # %bb.0: # %entry105; CHECK-AIX-NEXT: mflr 0106; CHECK-AIX-NEXT: stwu 1, -64(1)107; CHECK-AIX-NEXT: lwz 3, L..C2(2) # %const.0108; CHECK-AIX-NEXT: stw 0, 72(1)109; CHECK-AIX-NEXT: lfs 2, 0(3)110; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]111; CHECK-AIX-NEXT: nop112; CHECK-AIX-NEXT: addi 1, 1, 64113; CHECK-AIX-NEXT: lwz 0, 8(1)114; CHECK-AIX-NEXT: mtlr 0115; CHECK-AIX-NEXT: blr116entry:117 %call = tail call nnan ninf afn nsz float @powf(float %a, float 7.500000e-01)118 ret float %call119}120 121; fast-math pow with 0.75122define double @pow_f64_fast075(double %a) #1 {123;124; CHECK-LNX-LABEL: pow_f64_fast075:125; CHECK-LNX: # %bb.0: # %entry126; CHECK-LNX-NEXT: mflr 0127; CHECK-LNX-NEXT: stdu 1, -32(1)128; CHECK-LNX-NEXT: std 0, 48(1)129; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32130; CHECK-LNX-NEXT: .cfi_offset lr, 16131; CHECK-LNX-NEXT: addis 3, 2, .LCPI3_0@toc@ha132; CHECK-LNX-NEXT: lfs 2, .LCPI3_0@toc@l(3)133; CHECK-LNX-NEXT: bl __xl_pow_finite134; CHECK-LNX-NEXT: nop135; CHECK-LNX-NEXT: addi 1, 1, 32136; CHECK-LNX-NEXT: ld 0, 16(1)137; CHECK-LNX-NEXT: mtlr 0138; CHECK-LNX-NEXT: blr139;140; CHECK-AIX-LABEL: pow_f64_fast075:141; CHECK-AIX: # %bb.0: # %entry142; CHECK-AIX-NEXT: mflr 0143; CHECK-AIX-NEXT: stwu 1, -64(1)144; CHECK-AIX-NEXT: lwz 3, L..C3(2) # %const.0145; CHECK-AIX-NEXT: stw 0, 72(1)146; CHECK-AIX-NEXT: lfs 2, 0(3)147; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]148; CHECK-AIX-NEXT: nop149; CHECK-AIX-NEXT: addi 1, 1, 64150; CHECK-AIX-NEXT: lwz 0, 8(1)151; CHECK-AIX-NEXT: mtlr 0152; CHECK-AIX-NEXT: blr153entry:154 %call = tail call nnan ninf afn nsz double @pow(double %a, double 7.500000e-01)155 ret double %call156}157 158; fast-math powf with 0.50159define float @powf_f32_fast050(float %a) #1 {160;161; CHECK-LNX-LABEL: powf_f32_fast050:162; CHECK-LNX: # %bb.0: # %entry163; CHECK-LNX-NEXT: mflr 0164; CHECK-LNX-NEXT: stdu 1, -32(1)165; CHECK-LNX-NEXT: std 0, 48(1)166; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32167; CHECK-LNX-NEXT: .cfi_offset lr, 16168; CHECK-LNX-NEXT: addis 3, 2, .LCPI4_0@toc@ha169; CHECK-LNX-NEXT: lfs 2, .LCPI4_0@toc@l(3)170; CHECK-LNX-NEXT: bl __xl_powf_finite171; CHECK-LNX-NEXT: nop172; CHECK-LNX-NEXT: addi 1, 1, 32173; CHECK-LNX-NEXT: ld 0, 16(1)174; CHECK-LNX-NEXT: mtlr 0175; CHECK-LNX-NEXT: blr176;177; CHECK-AIX-LABEL: powf_f32_fast050:178; CHECK-AIX: # %bb.0: # %entry179; CHECK-AIX-NEXT: mflr 0180; CHECK-AIX-NEXT: stwu 1, -64(1)181; CHECK-AIX-NEXT: lwz 3, L..C4(2) # %const.0182; CHECK-AIX-NEXT: stw 0, 72(1)183; CHECK-AIX-NEXT: lfs 2, 0(3)184; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]185; CHECK-AIX-NEXT: nop186; CHECK-AIX-NEXT: addi 1, 1, 64187; CHECK-AIX-NEXT: lwz 0, 8(1)188; CHECK-AIX-NEXT: mtlr 0189; CHECK-AIX-NEXT: blr190entry:191 %call = tail call nnan ninf afn nsz float @powf(float %a, float 5.000000e-01)192 ret float %call193}194 195; fast-math pow with 0.50196define double @pow_f64_fast050(double %a) #1 {197;198; CHECK-LNX-LABEL: pow_f64_fast050:199; CHECK-LNX: # %bb.0: # %entry200; CHECK-LNX-NEXT: mflr 0201; CHECK-LNX-NEXT: stdu 1, -32(1)202; CHECK-LNX-NEXT: std 0, 48(1)203; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32204; CHECK-LNX-NEXT: .cfi_offset lr, 16205; CHECK-LNX-NEXT: addis 3, 2, .LCPI5_0@toc@ha206; CHECK-LNX-NEXT: lfs 2, .LCPI5_0@toc@l(3)207; CHECK-LNX-NEXT: bl __xl_pow_finite208; CHECK-LNX-NEXT: nop209; CHECK-LNX-NEXT: addi 1, 1, 32210; CHECK-LNX-NEXT: ld 0, 16(1)211; CHECK-LNX-NEXT: mtlr 0212; CHECK-LNX-NEXT: blr213;214; CHECK-AIX-LABEL: pow_f64_fast050:215; CHECK-AIX: # %bb.0: # %entry216; CHECK-AIX-NEXT: mflr 0217; CHECK-AIX-NEXT: stwu 1, -64(1)218; CHECK-AIX-NEXT: lwz 3, L..C5(2) # %const.0219; CHECK-AIX-NEXT: stw 0, 72(1)220; CHECK-AIX-NEXT: lfs 2, 0(3)221; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]222; CHECK-AIX-NEXT: nop223; CHECK-AIX-NEXT: addi 1, 1, 64224; CHECK-AIX-NEXT: lwz 0, 8(1)225; CHECK-AIX-NEXT: mtlr 0226; CHECK-AIX-NEXT: blr227entry:228 %call = tail call nnan ninf afn nsz double @pow(double %a, double 5.000000e-01)229 ret double %call230}231 232;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;233 234; fast-math __powf_finite with 0.25235define float @__powf_finite_f32_fast025(float %a) #1 {236;237; CHECK-LNX-LABEL: __powf_finite_f32_fast025:238; CHECK-LNX: # %bb.0: # %entry239; CHECK-LNX-NEXT: mflr 0240; CHECK-LNX-NEXT: stdu 1, -32(1)241; CHECK-LNX-NEXT: std 0, 48(1)242; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32243; CHECK-LNX-NEXT: .cfi_offset lr, 16244; CHECK-LNX-NEXT: addis 3, 2, .LCPI6_0@toc@ha245; CHECK-LNX-NEXT: lfs 2, .LCPI6_0@toc@l(3)246; CHECK-LNX-NEXT: bl __xl_powf_finite247; CHECK-LNX-NEXT: nop248; CHECK-LNX-NEXT: addi 1, 1, 32249; CHECK-LNX-NEXT: ld 0, 16(1)250; CHECK-LNX-NEXT: mtlr 0251; CHECK-LNX-NEXT: blr252;253; CHECK-AIX-LABEL: __powf_finite_f32_fast025:254; CHECK-AIX: # %bb.0: # %entry255; CHECK-AIX-NEXT: mflr 0256; CHECK-AIX-NEXT: stwu 1, -64(1)257; CHECK-AIX-NEXT: lwz 3, L..C6(2) # %const.0258; CHECK-AIX-NEXT: stw 0, 72(1)259; CHECK-AIX-NEXT: lfs 2, 0(3)260; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]261; CHECK-AIX-NEXT: nop262; CHECK-AIX-NEXT: addi 1, 1, 64263; CHECK-AIX-NEXT: lwz 0, 8(1)264; CHECK-AIX-NEXT: mtlr 0265; CHECK-AIX-NEXT: blr266entry:267 %call = tail call nnan ninf afn nsz float @__powf_finite(float %a, float 2.500000e-01)268 ret float %call269}270 271; fast-math __pow_finite with 0.25272define double @__pow_finite_f64_fast025(double %a) #1 {273;274; CHECK-LNX-LABEL: __pow_finite_f64_fast025:275; CHECK-LNX: # %bb.0: # %entry276; CHECK-LNX-NEXT: mflr 0277; CHECK-LNX-NEXT: stdu 1, -32(1)278; CHECK-LNX-NEXT: std 0, 48(1)279; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32280; CHECK-LNX-NEXT: .cfi_offset lr, 16281; CHECK-LNX-NEXT: addis 3, 2, .LCPI7_0@toc@ha282; CHECK-LNX-NEXT: lfs 2, .LCPI7_0@toc@l(3)283; CHECK-LNX-NEXT: bl __xl_pow_finite284; CHECK-LNX-NEXT: nop285; CHECK-LNX-NEXT: addi 1, 1, 32286; CHECK-LNX-NEXT: ld 0, 16(1)287; CHECK-LNX-NEXT: mtlr 0288; CHECK-LNX-NEXT: blr289;290; CHECK-AIX-LABEL: __pow_finite_f64_fast025:291; CHECK-AIX: # %bb.0: # %entry292; CHECK-AIX-NEXT: mflr 0293; CHECK-AIX-NEXT: stwu 1, -64(1)294; CHECK-AIX-NEXT: lwz 3, L..C7(2) # %const.0295; CHECK-AIX-NEXT: stw 0, 72(1)296; CHECK-AIX-NEXT: lfs 2, 0(3)297; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]298; CHECK-AIX-NEXT: nop299; CHECK-AIX-NEXT: addi 1, 1, 64300; CHECK-AIX-NEXT: lwz 0, 8(1)301; CHECK-AIX-NEXT: mtlr 0302; CHECK-AIX-NEXT: blr303entry:304 %call = tail call nnan ninf afn nsz double @__pow_finite(double %a, double 2.500000e-01)305 ret double %call306}307 308; fast-math __powf_finite with 0.75309define float @__powf_finite_f32_fast075(float %a) #1 {310;311; CHECK-LNX-LABEL: __powf_finite_f32_fast075:312; CHECK-LNX: # %bb.0: # %entry313; CHECK-LNX-NEXT: mflr 0314; CHECK-LNX-NEXT: stdu 1, -32(1)315; CHECK-LNX-NEXT: std 0, 48(1)316; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32317; CHECK-LNX-NEXT: .cfi_offset lr, 16318; CHECK-LNX-NEXT: addis 3, 2, .LCPI8_0@toc@ha319; CHECK-LNX-NEXT: lfs 2, .LCPI8_0@toc@l(3)320; CHECK-LNX-NEXT: bl __xl_powf_finite321; CHECK-LNX-NEXT: nop322; CHECK-LNX-NEXT: addi 1, 1, 32323; CHECK-LNX-NEXT: ld 0, 16(1)324; CHECK-LNX-NEXT: mtlr 0325; CHECK-LNX-NEXT: blr326;327; CHECK-AIX-LABEL: __powf_finite_f32_fast075:328; CHECK-AIX: # %bb.0: # %entry329; CHECK-AIX-NEXT: mflr 0330; CHECK-AIX-NEXT: stwu 1, -64(1)331; CHECK-AIX-NEXT: lwz 3, L..C8(2) # %const.0332; CHECK-AIX-NEXT: stw 0, 72(1)333; CHECK-AIX-NEXT: lfs 2, 0(3)334; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]335; CHECK-AIX-NEXT: nop336; CHECK-AIX-NEXT: addi 1, 1, 64337; CHECK-AIX-NEXT: lwz 0, 8(1)338; CHECK-AIX-NEXT: mtlr 0339; CHECK-AIX-NEXT: blr340entry:341 %call = tail call nnan ninf afn nsz float @__powf_finite(float %a, float 7.500000e-01)342 ret float %call343}344 345; fast-math __pow_finite with 0.75346define double @__pow_finite_f64_fast075(double %a) #1 {347;348; CHECK-LNX-LABEL: __pow_finite_f64_fast075:349; CHECK-LNX: # %bb.0: # %entry350; CHECK-LNX-NEXT: mflr 0351; CHECK-LNX-NEXT: stdu 1, -32(1)352; CHECK-LNX-NEXT: std 0, 48(1)353; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32354; CHECK-LNX-NEXT: .cfi_offset lr, 16355; CHECK-LNX-NEXT: addis 3, 2, .LCPI9_0@toc@ha356; CHECK-LNX-NEXT: lfs 2, .LCPI9_0@toc@l(3)357; CHECK-LNX-NEXT: bl __xl_pow_finite358; CHECK-LNX-NEXT: nop359; CHECK-LNX-NEXT: addi 1, 1, 32360; CHECK-LNX-NEXT: ld 0, 16(1)361; CHECK-LNX-NEXT: mtlr 0362; CHECK-LNX-NEXT: blr363;364; CHECK-AIX-LABEL: __pow_finite_f64_fast075:365; CHECK-AIX: # %bb.0: # %entry366; CHECK-AIX-NEXT: mflr 0367; CHECK-AIX-NEXT: stwu 1, -64(1)368; CHECK-AIX-NEXT: lwz 3, L..C9(2) # %const.0369; CHECK-AIX-NEXT: stw 0, 72(1)370; CHECK-AIX-NEXT: lfs 2, 0(3)371; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]372; CHECK-AIX-NEXT: nop373; CHECK-AIX-NEXT: addi 1, 1, 64374; CHECK-AIX-NEXT: lwz 0, 8(1)375; CHECK-AIX-NEXT: mtlr 0376; CHECK-AIX-NEXT: blr377entry:378 %call = tail call nnan ninf afn nsz double @__pow_finite(double %a, double 7.500000e-01)379 ret double %call380}381 382; fast-math __powf_finite with 0.50383define float @__powf_finite_f32_fast050(float %a) #1 {384;385; CHECK-LNX-LABEL: __powf_finite_f32_fast050:386; CHECK-LNX: # %bb.0: # %entry387; CHECK-LNX-NEXT: mflr 0388; CHECK-LNX-NEXT: stdu 1, -32(1)389; CHECK-LNX-NEXT: std 0, 48(1)390; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32391; CHECK-LNX-NEXT: .cfi_offset lr, 16392; CHECK-LNX-NEXT: addis 3, 2, .LCPI10_0@toc@ha393; CHECK-LNX-NEXT: lfs 2, .LCPI10_0@toc@l(3)394; CHECK-LNX-NEXT: bl __xl_powf_finite395; CHECK-LNX-NEXT: nop396; CHECK-LNX-NEXT: addi 1, 1, 32397; CHECK-LNX-NEXT: ld 0, 16(1)398; CHECK-LNX-NEXT: mtlr 0399; CHECK-LNX-NEXT: blr400;401; CHECK-AIX-LABEL: __powf_finite_f32_fast050:402; CHECK-AIX: # %bb.0: # %entry403; CHECK-AIX-NEXT: mflr 0404; CHECK-AIX-NEXT: stwu 1, -64(1)405; CHECK-AIX-NEXT: lwz 3, L..C10(2) # %const.0406; CHECK-AIX-NEXT: stw 0, 72(1)407; CHECK-AIX-NEXT: lfs 2, 0(3)408; CHECK-AIX-NEXT: bl .__xl_powf_finite[PR]409; CHECK-AIX-NEXT: nop410; CHECK-AIX-NEXT: addi 1, 1, 64411; CHECK-AIX-NEXT: lwz 0, 8(1)412; CHECK-AIX-NEXT: mtlr 0413; CHECK-AIX-NEXT: blr414entry:415 %call = tail call nnan ninf afn nsz float @__powf_finite(float %a, float 5.000000e-01)416 ret float %call417}418 419; fast-math __pow_finite with 0.50420define double @__pow_finite_f64_fast050(double %a) #1 {421;422; CHECK-LNX-LABEL: __pow_finite_f64_fast050:423; CHECK-LNX: # %bb.0: # %entry424; CHECK-LNX-NEXT: mflr 0425; CHECK-LNX-NEXT: stdu 1, -32(1)426; CHECK-LNX-NEXT: std 0, 48(1)427; CHECK-LNX-NEXT: .cfi_def_cfa_offset 32428; CHECK-LNX-NEXT: .cfi_offset lr, 16429; CHECK-LNX-NEXT: addis 3, 2, .LCPI11_0@toc@ha430; CHECK-LNX-NEXT: lfs 2, .LCPI11_0@toc@l(3)431; CHECK-LNX-NEXT: bl __xl_pow_finite432; CHECK-LNX-NEXT: nop433; CHECK-LNX-NEXT: addi 1, 1, 32434; CHECK-LNX-NEXT: ld 0, 16(1)435; CHECK-LNX-NEXT: mtlr 0436; CHECK-LNX-NEXT: blr437;438; CHECK-AIX-LABEL: __pow_finite_f64_fast050:439; CHECK-AIX: # %bb.0: # %entry440; CHECK-AIX-NEXT: mflr 0441; CHECK-AIX-NEXT: stwu 1, -64(1)442; CHECK-AIX-NEXT: lwz 3, L..C11(2) # %const.0443; CHECK-AIX-NEXT: stw 0, 72(1)444; CHECK-AIX-NEXT: lfs 2, 0(3)445; CHECK-AIX-NEXT: bl .__xl_pow_finite[PR]446; CHECK-AIX-NEXT: nop447; CHECK-AIX-NEXT: addi 1, 1, 64448; CHECK-AIX-NEXT: lwz 0, 8(1)449; CHECK-AIX-NEXT: mtlr 0450; CHECK-AIX-NEXT: blr451entry:452 %call = tail call nnan ninf afn nsz double @__pow_finite(double %a, double 5.000000e-01)453 ret double %call454}455 456attributes #1 = { "no-infs-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" }457