brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.9 KiB · 0000470 Raw
204 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mattr=+simd128 | FileCheck %s3 4; Test wide load+promote patterns, which after combines and legalization are5; represented differently than 128-bit load+promote patterns.6 7target triple = "wasm32-unknown-unknown"8 9define <4 x double> @load_promote_v2f64(ptr %p) {10; CHECK-LABEL: load_promote_v2f64:11; CHECK:         .functype load_promote_v2f64 (i32, i32) -> ()12; CHECK-NEXT:  # %bb.0:13; CHECK-NEXT:    local.get 014; CHECK-NEXT:    local.get 115; CHECK-NEXT:    i32.const 816; CHECK-NEXT:    i32.add17; CHECK-NEXT:    v128.load64_zero 018; CHECK-NEXT:    f64x2.promote_low_f32x419; CHECK-NEXT:    v128.store 1620; CHECK-NEXT:    local.get 021; CHECK-NEXT:    local.get 122; CHECK-NEXT:    v128.load64_zero 023; CHECK-NEXT:    f64x2.promote_low_f32x424; CHECK-NEXT:    v128.store 025; CHECK-NEXT:    # fallthrough-return26  %e = load <4 x float>, ptr %p27  %v = fpext <4 x float> %e to <4 x double>28  ret <4 x double> %v29}30 31define <4 x double> @load_promote_v2f64_with_folded_offset(ptr %p) {32; CHECK-LABEL: load_promote_v2f64_with_folded_offset:33; CHECK:         .functype load_promote_v2f64_with_folded_offset (i32, i32) -> ()34; CHECK-NEXT:  # %bb.0:35; CHECK-NEXT:    local.get 036; CHECK-NEXT:    local.get 137; CHECK-NEXT:    i32.const 2438; CHECK-NEXT:    i32.add39; CHECK-NEXT:    v128.load64_zero 040; CHECK-NEXT:    f64x2.promote_low_f32x441; CHECK-NEXT:    v128.store 1642; CHECK-NEXT:    local.get 043; CHECK-NEXT:    local.get 144; CHECK-NEXT:    i32.const 1645; CHECK-NEXT:    i32.add46; CHECK-NEXT:    v128.load64_zero 047; CHECK-NEXT:    f64x2.promote_low_f32x448; CHECK-NEXT:    v128.store 049; CHECK-NEXT:    # fallthrough-return50  %q = ptrtoint ptr %p to i3251  %r = add nuw i32 %q, 1652  %s = inttoptr i32 %r to ptr53  %e = load <4 x float>, ptr %s54  %v = fpext <4 x float> %e to <4 x double>55  ret <4 x double> %v56}57 58define <4 x double> @load_promote_v2f64_with_folded_gep_offset(ptr %p) {59; CHECK-LABEL: load_promote_v2f64_with_folded_gep_offset:60; CHECK:         .functype load_promote_v2f64_with_folded_gep_offset (i32, i32) -> ()61; CHECK-NEXT:  # %bb.0:62; CHECK-NEXT:    local.get 063; CHECK-NEXT:    local.get 164; CHECK-NEXT:    i32.const 2465; CHECK-NEXT:    i32.add66; CHECK-NEXT:    v128.load64_zero 067; CHECK-NEXT:    f64x2.promote_low_f32x468; CHECK-NEXT:    v128.store 1669; CHECK-NEXT:    local.get 070; CHECK-NEXT:    local.get 171; CHECK-NEXT:    i32.const 1672; CHECK-NEXT:    i32.add73; CHECK-NEXT:    v128.load64_zero 074; CHECK-NEXT:    f64x2.promote_low_f32x475; CHECK-NEXT:    v128.store 076; CHECK-NEXT:    # fallthrough-return77  %s = getelementptr inbounds <4 x float>, ptr %p, i32 178  %e = load <4 x float>, ptr %s79  %v = fpext <4 x float> %e to <4 x double>80  ret <4 x double> %v81}82 83define <4 x double> @load_promote_v2f64_with_unfolded_gep_negative_offset(ptr %p) {84; CHECK-LABEL: load_promote_v2f64_with_unfolded_gep_negative_offset:85; CHECK:         .functype load_promote_v2f64_with_unfolded_gep_negative_offset (i32, i32) -> ()86; CHECK-NEXT:  # %bb.0:87; CHECK-NEXT:    local.get 088; CHECK-NEXT:    local.get 189; CHECK-NEXT:    i32.const -1690; CHECK-NEXT:    i32.add91; CHECK-NEXT:    local.tee 192; CHECK-NEXT:    v128.load64_zero 093; CHECK-NEXT:    f64x2.promote_low_f32x494; CHECK-NEXT:    v128.store 095; CHECK-NEXT:    local.get 096; CHECK-NEXT:    local.get 197; CHECK-NEXT:    i32.const 898; CHECK-NEXT:    i32.add99; CHECK-NEXT:    v128.load64_zero 0100; CHECK-NEXT:    f64x2.promote_low_f32x4101; CHECK-NEXT:    v128.store 16102; CHECK-NEXT:    # fallthrough-return103  %s = getelementptr inbounds <4 x float>, ptr %p, i32 -1104  %e = load <4 x float>, ptr %s105  %v = fpext <4 x float> %e to <4 x double>106  ret <4 x double> %v107}108 109define <4 x double> @load_promote_v2f64_with_unfolded_offset(ptr %p) {110; CHECK-LABEL: load_promote_v2f64_with_unfolded_offset:111; CHECK:         .functype load_promote_v2f64_with_unfolded_offset (i32, i32) -> ()112; CHECK-NEXT:  # %bb.0:113; CHECK-NEXT:    local.get 0114; CHECK-NEXT:    local.get 1115; CHECK-NEXT:    i32.const 24116; CHECK-NEXT:    i32.add117; CHECK-NEXT:    v128.load64_zero 0118; CHECK-NEXT:    f64x2.promote_low_f32x4119; CHECK-NEXT:    v128.store 16120; CHECK-NEXT:    local.get 0121; CHECK-NEXT:    local.get 1122; CHECK-NEXT:    i32.const 16123; CHECK-NEXT:    i32.add124; CHECK-NEXT:    v128.load64_zero 0125; CHECK-NEXT:    f64x2.promote_low_f32x4126; CHECK-NEXT:    v128.store 0127; CHECK-NEXT:    # fallthrough-return128  %q = ptrtoint ptr %p to i32129  %r = add nsw i32 %q, 16130  %s = inttoptr i32 %r to ptr131  %e = load <4 x float>, ptr %s132  %v = fpext <4 x float> %e to <4 x double>133  ret <4 x double> %v134}135 136define <4 x double> @load_promote_v2f64_with_unfolded_gep_offset(ptr %p) {137; CHECK-LABEL: load_promote_v2f64_with_unfolded_gep_offset:138; CHECK:         .functype load_promote_v2f64_with_unfolded_gep_offset (i32, i32) -> ()139; CHECK-NEXT:  # %bb.0:140; CHECK-NEXT:    local.get 0141; CHECK-NEXT:    local.get 1142; CHECK-NEXT:    i32.const 24143; CHECK-NEXT:    i32.add144; CHECK-NEXT:    v128.load64_zero 0145; CHECK-NEXT:    f64x2.promote_low_f32x4146; CHECK-NEXT:    v128.store 16147; CHECK-NEXT:    local.get 0148; CHECK-NEXT:    local.get 1149; CHECK-NEXT:    i32.const 16150; CHECK-NEXT:    i32.add151; CHECK-NEXT:    v128.load64_zero 0152; CHECK-NEXT:    f64x2.promote_low_f32x4153; CHECK-NEXT:    v128.store 0154; CHECK-NEXT:    # fallthrough-return155  %s = getelementptr <4 x float>, ptr %p, i32 1156  %e = load <4 x float>, ptr %s157  %v = fpext <4 x float> %e to <4 x double>158  ret <4 x double> %v159}160 161define <4 x double> @load_promote_v2f64_from_numeric_address() {162; CHECK-LABEL: load_promote_v2f64_from_numeric_address:163; CHECK:         .functype load_promote_v2f64_from_numeric_address (i32) -> ()164; CHECK-NEXT:  # %bb.0:165; CHECK-NEXT:    local.get 0166; CHECK-NEXT:    i32.const 40167; CHECK-NEXT:    v128.load64_zero 0168; CHECK-NEXT:    f64x2.promote_low_f32x4169; CHECK-NEXT:    v128.store 16170; CHECK-NEXT:    local.get 0171; CHECK-NEXT:    i32.const 32172; CHECK-NEXT:    v128.load64_zero 0173; CHECK-NEXT:    f64x2.promote_low_f32x4174; CHECK-NEXT:    v128.store 0175; CHECK-NEXT:    # fallthrough-return176  %s = inttoptr i32 32 to ptr177  %e = load <4 x float>, ptr %s178  %v = fpext <4 x float> %e to <4 x double>179  ret <4 x double> %v180}181 182@gv_v4f32 = global <4 x float> <float 42., float 42., float 42., float 42.>183define <4 x double> @load_promote_v2f64_from_global_address() {184; CHECK-LABEL: load_promote_v2f64_from_global_address:185; CHECK:         .functype load_promote_v2f64_from_global_address (i32) -> ()186; CHECK-NEXT:  # %bb.0:187; CHECK-NEXT:    local.get 0188; CHECK-NEXT:    i32.const gv_v4f32189; CHECK-NEXT:    i32.const 8190; CHECK-NEXT:    i32.add191; CHECK-NEXT:    v128.load64_zero 0192; CHECK-NEXT:    f64x2.promote_low_f32x4193; CHECK-NEXT:    v128.store 16194; CHECK-NEXT:    local.get 0195; CHECK-NEXT:    i32.const gv_v4f32196; CHECK-NEXT:    v128.load64_zero 0197; CHECK-NEXT:    f64x2.promote_low_f32x4198; CHECK-NEXT:    v128.store 0199; CHECK-NEXT:    # fallthrough-return200  %e = load <4 x float>, ptr @gv_v4f32201  %v = fpext <4 x float> %e to <4 x double>202  ret <4 x double> %v203}204