brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.7 KiB · eabfa47 Raw
382 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=wasm32-unknown-unknown < %s | FileCheck -check-prefix=WASM32 %s3; RUN: llc -mtriple=wasm64-unknown-unknown < %s | FileCheck -check-prefix=WASM64 %s4 5define i8 @atomicrmw_uinc_wrap_i8(ptr %ptr, i8 %val) {6; WASM32-LABEL: atomicrmw_uinc_wrap_i8:7; WASM32:         .functype atomicrmw_uinc_wrap_i8 (i32, i32) -> (i32)8; WASM32-NEXT:    .local i329; WASM32-NEXT:  # %bb.0:10; WASM32-NEXT:    local.get 011; WASM32-NEXT:    i32.const 012; WASM32-NEXT:    local.get 013; WASM32-NEXT:    i32.load8_u 014; WASM32-NEXT:    local.tee 215; WASM32-NEXT:    i32.const 116; WASM32-NEXT:    i32.add17; WASM32-NEXT:    local.get 218; WASM32-NEXT:    local.get 119; WASM32-NEXT:    i32.const 25520; WASM32-NEXT:    i32.and21; WASM32-NEXT:    i32.ge_u22; WASM32-NEXT:    i32.select23; WASM32-NEXT:    i32.store8 024; WASM32-NEXT:    local.get 225; WASM32-NEXT:    # fallthrough-return26;27; WASM64-LABEL: atomicrmw_uinc_wrap_i8:28; WASM64:         .functype atomicrmw_uinc_wrap_i8 (i64, i32) -> (i32)29; WASM64-NEXT:    .local i3230; WASM64-NEXT:  # %bb.0:31; WASM64-NEXT:    local.get 032; WASM64-NEXT:    i32.const 033; WASM64-NEXT:    local.get 034; WASM64-NEXT:    i32.load8_u 035; WASM64-NEXT:    local.tee 236; WASM64-NEXT:    i32.const 137; WASM64-NEXT:    i32.add38; WASM64-NEXT:    local.get 239; WASM64-NEXT:    local.get 140; WASM64-NEXT:    i32.const 25541; WASM64-NEXT:    i32.and42; WASM64-NEXT:    i32.ge_u43; WASM64-NEXT:    i32.select44; WASM64-NEXT:    i32.store8 045; WASM64-NEXT:    local.get 246; WASM64-NEXT:    # fallthrough-return47  %result = atomicrmw uinc_wrap ptr %ptr, i8 %val seq_cst48  ret i8 %result49}50 51define i16 @atomicrmw_uinc_wrap_i16(ptr %ptr, i16 %val) {52; WASM32-LABEL: atomicrmw_uinc_wrap_i16:53; WASM32:         .functype atomicrmw_uinc_wrap_i16 (i32, i32) -> (i32)54; WASM32-NEXT:    .local i3255; WASM32-NEXT:  # %bb.0:56; WASM32-NEXT:    local.get 057; WASM32-NEXT:    i32.const 058; WASM32-NEXT:    local.get 059; WASM32-NEXT:    i32.load16_u 060; WASM32-NEXT:    local.tee 261; WASM32-NEXT:    i32.const 162; WASM32-NEXT:    i32.add63; WASM32-NEXT:    local.get 264; WASM32-NEXT:    local.get 165; WASM32-NEXT:    i32.const 6553566; WASM32-NEXT:    i32.and67; WASM32-NEXT:    i32.ge_u68; WASM32-NEXT:    i32.select69; WASM32-NEXT:    i32.store16 070; WASM32-NEXT:    local.get 271; WASM32-NEXT:    # fallthrough-return72;73; WASM64-LABEL: atomicrmw_uinc_wrap_i16:74; WASM64:         .functype atomicrmw_uinc_wrap_i16 (i64, i32) -> (i32)75; WASM64-NEXT:    .local i3276; WASM64-NEXT:  # %bb.0:77; WASM64-NEXT:    local.get 078; WASM64-NEXT:    i32.const 079; WASM64-NEXT:    local.get 080; WASM64-NEXT:    i32.load16_u 081; WASM64-NEXT:    local.tee 282; WASM64-NEXT:    i32.const 183; WASM64-NEXT:    i32.add84; WASM64-NEXT:    local.get 285; WASM64-NEXT:    local.get 186; WASM64-NEXT:    i32.const 6553587; WASM64-NEXT:    i32.and88; WASM64-NEXT:    i32.ge_u89; WASM64-NEXT:    i32.select90; WASM64-NEXT:    i32.store16 091; WASM64-NEXT:    local.get 292; WASM64-NEXT:    # fallthrough-return93  %result = atomicrmw uinc_wrap ptr %ptr, i16 %val seq_cst94  ret i16 %result95}96 97define i32 @atomicrmw_uinc_wrap_i32(ptr %ptr, i32 %val) {98; WASM32-LABEL: atomicrmw_uinc_wrap_i32:99; WASM32:         .functype atomicrmw_uinc_wrap_i32 (i32, i32) -> (i32)100; WASM32-NEXT:    .local i32101; WASM32-NEXT:  # %bb.0:102; WASM32-NEXT:    local.get 0103; WASM32-NEXT:    i32.const 0104; WASM32-NEXT:    local.get 0105; WASM32-NEXT:    i32.load 0106; WASM32-NEXT:    local.tee 2107; WASM32-NEXT:    i32.const 1108; WASM32-NEXT:    i32.add109; WASM32-NEXT:    local.get 2110; WASM32-NEXT:    local.get 1111; WASM32-NEXT:    i32.ge_u112; WASM32-NEXT:    i32.select113; WASM32-NEXT:    i32.store 0114; WASM32-NEXT:    local.get 2115; WASM32-NEXT:    # fallthrough-return116;117; WASM64-LABEL: atomicrmw_uinc_wrap_i32:118; WASM64:         .functype atomicrmw_uinc_wrap_i32 (i64, i32) -> (i32)119; WASM64-NEXT:    .local i32120; WASM64-NEXT:  # %bb.0:121; WASM64-NEXT:    local.get 0122; WASM64-NEXT:    i32.const 0123; WASM64-NEXT:    local.get 0124; WASM64-NEXT:    i32.load 0125; WASM64-NEXT:    local.tee 2126; WASM64-NEXT:    i32.const 1127; WASM64-NEXT:    i32.add128; WASM64-NEXT:    local.get 2129; WASM64-NEXT:    local.get 1130; WASM64-NEXT:    i32.ge_u131; WASM64-NEXT:    i32.select132; WASM64-NEXT:    i32.store 0133; WASM64-NEXT:    local.get 2134; WASM64-NEXT:    # fallthrough-return135  %result = atomicrmw uinc_wrap ptr %ptr, i32 %val seq_cst136  ret i32 %result137}138 139define i64 @atomicrmw_uinc_wrap_i64(ptr %ptr, i64 %val) {140; WASM32-LABEL: atomicrmw_uinc_wrap_i64:141; WASM32:         .functype atomicrmw_uinc_wrap_i64 (i32, i64) -> (i64)142; WASM32-NEXT:    .local i64143; WASM32-NEXT:  # %bb.0:144; WASM32-NEXT:    local.get 0145; WASM32-NEXT:    i64.const 0146; WASM32-NEXT:    local.get 0147; WASM32-NEXT:    i64.load 0148; WASM32-NEXT:    local.tee 2149; WASM32-NEXT:    i64.const 1150; WASM32-NEXT:    i64.add151; WASM32-NEXT:    local.get 2152; WASM32-NEXT:    local.get 1153; WASM32-NEXT:    i64.ge_u154; WASM32-NEXT:    i64.select155; WASM32-NEXT:    i64.store 0156; WASM32-NEXT:    local.get 2157; WASM32-NEXT:    # fallthrough-return158;159; WASM64-LABEL: atomicrmw_uinc_wrap_i64:160; WASM64:         .functype atomicrmw_uinc_wrap_i64 (i64, i64) -> (i64)161; WASM64-NEXT:    .local i64162; WASM64-NEXT:  # %bb.0:163; WASM64-NEXT:    local.get 0164; WASM64-NEXT:    i64.const 0165; WASM64-NEXT:    local.get 0166; WASM64-NEXT:    i64.load 0167; WASM64-NEXT:    local.tee 2168; WASM64-NEXT:    i64.const 1169; WASM64-NEXT:    i64.add170; WASM64-NEXT:    local.get 2171; WASM64-NEXT:    local.get 1172; WASM64-NEXT:    i64.ge_u173; WASM64-NEXT:    i64.select174; WASM64-NEXT:    i64.store 0175; WASM64-NEXT:    local.get 2176; WASM64-NEXT:    # fallthrough-return177  %result = atomicrmw uinc_wrap ptr %ptr, i64 %val seq_cst178  ret i64 %result179}180 181define i8 @atomicrmw_udec_wrap_i8(ptr %ptr, i8 %val) {182; WASM32-LABEL: atomicrmw_udec_wrap_i8:183; WASM32:         .functype atomicrmw_udec_wrap_i8 (i32, i32) -> (i32)184; WASM32-NEXT:    .local i32185; WASM32-NEXT:  # %bb.0:186; WASM32-NEXT:    local.get 0187; WASM32-NEXT:    local.get 1188; WASM32-NEXT:    local.get 0189; WASM32-NEXT:    i32.load8_u 0190; WASM32-NEXT:    local.tee 2191; WASM32-NEXT:    i32.const -1192; WASM32-NEXT:    i32.add193; WASM32-NEXT:    local.get 2194; WASM32-NEXT:    local.get 1195; WASM32-NEXT:    i32.const 255196; WASM32-NEXT:    i32.and197; WASM32-NEXT:    i32.gt_u198; WASM32-NEXT:    i32.select199; WASM32-NEXT:    local.get 1200; WASM32-NEXT:    local.get 2201; WASM32-NEXT:    i32.select202; WASM32-NEXT:    i32.store8 0203; WASM32-NEXT:    local.get 2204; WASM32-NEXT:    # fallthrough-return205;206; WASM64-LABEL: atomicrmw_udec_wrap_i8:207; WASM64:         .functype atomicrmw_udec_wrap_i8 (i64, i32) -> (i32)208; WASM64-NEXT:    .local i32209; WASM64-NEXT:  # %bb.0:210; WASM64-NEXT:    local.get 0211; WASM64-NEXT:    local.get 1212; WASM64-NEXT:    local.get 0213; WASM64-NEXT:    i32.load8_u 0214; WASM64-NEXT:    local.tee 2215; WASM64-NEXT:    i32.const -1216; WASM64-NEXT:    i32.add217; WASM64-NEXT:    local.get 2218; WASM64-NEXT:    local.get 1219; WASM64-NEXT:    i32.const 255220; WASM64-NEXT:    i32.and221; WASM64-NEXT:    i32.gt_u222; WASM64-NEXT:    i32.select223; WASM64-NEXT:    local.get 1224; WASM64-NEXT:    local.get 2225; WASM64-NEXT:    i32.select226; WASM64-NEXT:    i32.store8 0227; WASM64-NEXT:    local.get 2228; WASM64-NEXT:    # fallthrough-return229  %result = atomicrmw udec_wrap ptr %ptr, i8 %val seq_cst230  ret i8 %result231}232 233define i16 @atomicrmw_udec_wrap_i16(ptr %ptr, i16 %val) {234; WASM32-LABEL: atomicrmw_udec_wrap_i16:235; WASM32:         .functype atomicrmw_udec_wrap_i16 (i32, i32) -> (i32)236; WASM32-NEXT:    .local i32237; WASM32-NEXT:  # %bb.0:238; WASM32-NEXT:    local.get 0239; WASM32-NEXT:    local.get 1240; WASM32-NEXT:    local.get 0241; WASM32-NEXT:    i32.load16_u 0242; WASM32-NEXT:    local.tee 2243; WASM32-NEXT:    i32.const -1244; WASM32-NEXT:    i32.add245; WASM32-NEXT:    local.get 2246; WASM32-NEXT:    local.get 1247; WASM32-NEXT:    i32.const 65535248; WASM32-NEXT:    i32.and249; WASM32-NEXT:    i32.gt_u250; WASM32-NEXT:    i32.select251; WASM32-NEXT:    local.get 1252; WASM32-NEXT:    local.get 2253; WASM32-NEXT:    i32.select254; WASM32-NEXT:    i32.store16 0255; WASM32-NEXT:    local.get 2256; WASM32-NEXT:    # fallthrough-return257;258; WASM64-LABEL: atomicrmw_udec_wrap_i16:259; WASM64:         .functype atomicrmw_udec_wrap_i16 (i64, i32) -> (i32)260; WASM64-NEXT:    .local i32261; WASM64-NEXT:  # %bb.0:262; WASM64-NEXT:    local.get 0263; WASM64-NEXT:    local.get 1264; WASM64-NEXT:    local.get 0265; WASM64-NEXT:    i32.load16_u 0266; WASM64-NEXT:    local.tee 2267; WASM64-NEXT:    i32.const -1268; WASM64-NEXT:    i32.add269; WASM64-NEXT:    local.get 2270; WASM64-NEXT:    local.get 1271; WASM64-NEXT:    i32.const 65535272; WASM64-NEXT:    i32.and273; WASM64-NEXT:    i32.gt_u274; WASM64-NEXT:    i32.select275; WASM64-NEXT:    local.get 1276; WASM64-NEXT:    local.get 2277; WASM64-NEXT:    i32.select278; WASM64-NEXT:    i32.store16 0279; WASM64-NEXT:    local.get 2280; WASM64-NEXT:    # fallthrough-return281  %result = atomicrmw udec_wrap ptr %ptr, i16 %val seq_cst282  ret i16 %result283}284 285define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {286; WASM32-LABEL: atomicrmw_udec_wrap_i32:287; WASM32:         .functype atomicrmw_udec_wrap_i32 (i32, i32) -> (i32)288; WASM32-NEXT:    .local i32289; WASM32-NEXT:  # %bb.0:290; WASM32-NEXT:    local.get 0291; WASM32-NEXT:    local.get 1292; WASM32-NEXT:    local.get 0293; WASM32-NEXT:    i32.load 0294; WASM32-NEXT:    local.tee 2295; WASM32-NEXT:    i32.const -1296; WASM32-NEXT:    i32.add297; WASM32-NEXT:    local.get 2298; WASM32-NEXT:    local.get 1299; WASM32-NEXT:    i32.gt_u300; WASM32-NEXT:    i32.select301; WASM32-NEXT:    local.get 1302; WASM32-NEXT:    local.get 2303; WASM32-NEXT:    i32.select304; WASM32-NEXT:    i32.store 0305; WASM32-NEXT:    local.get 2306; WASM32-NEXT:    # fallthrough-return307;308; WASM64-LABEL: atomicrmw_udec_wrap_i32:309; WASM64:         .functype atomicrmw_udec_wrap_i32 (i64, i32) -> (i32)310; WASM64-NEXT:    .local i32311; WASM64-NEXT:  # %bb.0:312; WASM64-NEXT:    local.get 0313; WASM64-NEXT:    local.get 1314; WASM64-NEXT:    local.get 0315; WASM64-NEXT:    i32.load 0316; WASM64-NEXT:    local.tee 2317; WASM64-NEXT:    i32.const -1318; WASM64-NEXT:    i32.add319; WASM64-NEXT:    local.get 2320; WASM64-NEXT:    local.get 1321; WASM64-NEXT:    i32.gt_u322; WASM64-NEXT:    i32.select323; WASM64-NEXT:    local.get 1324; WASM64-NEXT:    local.get 2325; WASM64-NEXT:    i32.select326; WASM64-NEXT:    i32.store 0327; WASM64-NEXT:    local.get 2328; WASM64-NEXT:    # fallthrough-return329  %result = atomicrmw udec_wrap ptr %ptr, i32 %val seq_cst330  ret i32 %result331}332 333define i64 @atomicrmw_udec_wrap_i64(ptr %ptr, i64 %val) {334; WASM32-LABEL: atomicrmw_udec_wrap_i64:335; WASM32:         .functype atomicrmw_udec_wrap_i64 (i32, i64) -> (i64)336; WASM32-NEXT:    .local i64337; WASM32-NEXT:  # %bb.0:338; WASM32-NEXT:    local.get 0339; WASM32-NEXT:    local.get 1340; WASM32-NEXT:    local.get 1341; WASM32-NEXT:    local.get 0342; WASM32-NEXT:    i64.load 0343; WASM32-NEXT:    local.tee 2344; WASM32-NEXT:    i64.const -1345; WASM32-NEXT:    i64.add346; WASM32-NEXT:    local.get 2347; WASM32-NEXT:    local.get 1348; WASM32-NEXT:    i64.gt_u349; WASM32-NEXT:    i64.select350; WASM32-NEXT:    local.get 2351; WASM32-NEXT:    i64.eqz352; WASM32-NEXT:    i64.select353; WASM32-NEXT:    i64.store 0354; WASM32-NEXT:    local.get 2355; WASM32-NEXT:    # fallthrough-return356;357; WASM64-LABEL: atomicrmw_udec_wrap_i64:358; WASM64:         .functype atomicrmw_udec_wrap_i64 (i64, i64) -> (i64)359; WASM64-NEXT:    .local i64360; WASM64-NEXT:  # %bb.0:361; WASM64-NEXT:    local.get 0362; WASM64-NEXT:    local.get 1363; WASM64-NEXT:    local.get 1364; WASM64-NEXT:    local.get 0365; WASM64-NEXT:    i64.load 0366; WASM64-NEXT:    local.tee 2367; WASM64-NEXT:    i64.const -1368; WASM64-NEXT:    i64.add369; WASM64-NEXT:    local.get 2370; WASM64-NEXT:    local.get 1371; WASM64-NEXT:    i64.gt_u372; WASM64-NEXT:    i64.select373; WASM64-NEXT:    local.get 2374; WASM64-NEXT:    i64.eqz375; WASM64-NEXT:    i64.select376; WASM64-NEXT:    i64.store 0377; WASM64-NEXT:    local.get 2378; WASM64-NEXT:    # fallthrough-return379  %result = atomicrmw udec_wrap ptr %ptr, i64 %val seq_cst380  ret i64 %result381}382