526 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs | FileCheck %s3target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128-ni:1:10:20"4target triple = "wasm32-unknown-unknown"5 6; Function Attrs: nounwind7define void @pass_s0() {8; CHECK-LABEL: pass_s0:9; CHECK: .functype pass_s0 () -> ()10; CHECK-NEXT: # %bb.0: # %entry11; CHECK-NEXT: i32.const 012; CHECK-NEXT: call sink13; CHECK-NEXT: # fallthrough-return14entry:15 tail call void (...) @sink()16 ret void17}18 19declare void @sink(...)20 21; Function Attrs: nounwind22define void @pass_s1(i8 %x.coerce) {23; CHECK-LABEL: pass_s1:24; CHECK: .functype pass_s1 (i32) -> ()25; CHECK-NEXT: .local i3226; CHECK-NEXT: # %bb.0: # %entry27; CHECK-NEXT: global.get __stack_pointer28; CHECK-NEXT: i32.const 1629; CHECK-NEXT: i32.sub30; CHECK-NEXT: local.tee 131; CHECK-NEXT: global.set __stack_pointer32; CHECK-NEXT: local.get 133; CHECK-NEXT: local.get 034; CHECK-NEXT: i32.store 035; CHECK-NEXT: local.get 136; CHECK-NEXT: call sink37; CHECK-NEXT: local.get 138; CHECK-NEXT: i32.const 1639; CHECK-NEXT: i32.add40; CHECK-NEXT: global.set __stack_pointer41; CHECK-NEXT: # fallthrough-return42entry:43 tail call void (...) @sink(i8 %x.coerce)44 ret void45}46 47; Function Attrs: nounwind48define void @pass_s2(i16 %x.coerce) {49; CHECK-LABEL: pass_s2:50; CHECK: .functype pass_s2 (i32) -> ()51; CHECK-NEXT: .local i3252; CHECK-NEXT: # %bb.0: # %entry53; CHECK-NEXT: global.get __stack_pointer54; CHECK-NEXT: i32.const 1655; CHECK-NEXT: i32.sub56; CHECK-NEXT: local.tee 157; CHECK-NEXT: global.set __stack_pointer58; CHECK-NEXT: local.get 159; CHECK-NEXT: local.get 060; CHECK-NEXT: i32.store 061; CHECK-NEXT: local.get 162; CHECK-NEXT: call sink63; CHECK-NEXT: local.get 164; CHECK-NEXT: i32.const 1665; CHECK-NEXT: i32.add66; CHECK-NEXT: global.set __stack_pointer67; CHECK-NEXT: # fallthrough-return68entry:69 tail call void (...) @sink(i16 %x.coerce)70 ret void71}72 73; Function Attrs: nounwind74define void @pass_s3(i32 %x.coerce) {75; CHECK-LABEL: pass_s3:76; CHECK: .functype pass_s3 (i32) -> ()77; CHECK-NEXT: .local i3278; CHECK-NEXT: # %bb.0: # %entry79; CHECK-NEXT: global.get __stack_pointer80; CHECK-NEXT: i32.const 1681; CHECK-NEXT: i32.sub82; CHECK-NEXT: local.tee 183; CHECK-NEXT: global.set __stack_pointer84; CHECK-NEXT: local.get 185; CHECK-NEXT: local.get 086; CHECK-NEXT: i32.store 087; CHECK-NEXT: local.get 188; CHECK-NEXT: call sink89; CHECK-NEXT: local.get 190; CHECK-NEXT: i32.const 1691; CHECK-NEXT: i32.add92; CHECK-NEXT: global.set __stack_pointer93; CHECK-NEXT: # fallthrough-return94entry:95 tail call void (...) @sink(i32 %x.coerce)96 ret void97}98 99; Function Attrs: nounwind100define void @pass_s4(i64 %x.coerce) {101; CHECK-LABEL: pass_s4:102; CHECK: .functype pass_s4 (i64) -> ()103; CHECK-NEXT: .local i32104; CHECK-NEXT: # %bb.0: # %entry105; CHECK-NEXT: global.get __stack_pointer106; CHECK-NEXT: i32.const 16107; CHECK-NEXT: i32.sub108; CHECK-NEXT: local.tee 1109; CHECK-NEXT: global.set __stack_pointer110; CHECK-NEXT: local.get 1111; CHECK-NEXT: local.get 0112; CHECK-NEXT: i64.store 0113; CHECK-NEXT: local.get 1114; CHECK-NEXT: call sink115; CHECK-NEXT: local.get 1116; CHECK-NEXT: i32.const 16117; CHECK-NEXT: i32.add118; CHECK-NEXT: global.set __stack_pointer119; CHECK-NEXT: # fallthrough-return120entry:121 tail call void (...) @sink(i64 %x.coerce)122 ret void123}124 125; Function Attrs: nounwind126define void @pass_s5(<4 x i32> noundef %x) {127; CHECK-LABEL: pass_s5:128; CHECK: .functype pass_s5 (i32, i32, i32, i32) -> ()129; CHECK-NEXT: .local i32130; CHECK-NEXT: # %bb.0: # %entry131; CHECK-NEXT: global.get __stack_pointer132; CHECK-NEXT: i32.const 16133; CHECK-NEXT: i32.sub134; CHECK-NEXT: local.tee 4135; CHECK-NEXT: global.set __stack_pointer136; CHECK-NEXT: local.get 4137; CHECK-NEXT: local.get 3138; CHECK-NEXT: i32.store 12139; CHECK-NEXT: local.get 4140; CHECK-NEXT: local.get 2141; CHECK-NEXT: i32.store 8142; CHECK-NEXT: local.get 4143; CHECK-NEXT: local.get 1144; CHECK-NEXT: i32.store 4145; CHECK-NEXT: local.get 4146; CHECK-NEXT: local.get 0147; CHECK-NEXT: i32.store 0148; CHECK-NEXT: local.get 4149; CHECK-NEXT: call sink150; CHECK-NEXT: local.get 4151; CHECK-NEXT: i32.const 16152; CHECK-NEXT: i32.add153; CHECK-NEXT: global.set __stack_pointer154; CHECK-NEXT: # fallthrough-return155entry:156 tail call void (...) @sink(<4 x i32> noundef %x)157 ret void158}159 160; Function Attrs: nounwind161define void @pass_int_s0(i32 noundef %i) {162; CHECK-LABEL: pass_int_s0:163; CHECK: .functype pass_int_s0 (i32) -> ()164; CHECK-NEXT: .local i32165; CHECK-NEXT: # %bb.0: # %entry166; CHECK-NEXT: global.get __stack_pointer167; CHECK-NEXT: i32.const 16168; CHECK-NEXT: i32.sub169; CHECK-NEXT: local.tee 1170; CHECK-NEXT: global.set __stack_pointer171; CHECK-NEXT: local.get 1172; CHECK-NEXT: local.get 0173; CHECK-NEXT: i32.store 0174; CHECK-NEXT: local.get 1175; CHECK-NEXT: call sink176; CHECK-NEXT: local.get 1177; CHECK-NEXT: i32.const 16178; CHECK-NEXT: i32.add179; CHECK-NEXT: global.set __stack_pointer180; CHECK-NEXT: # fallthrough-return181entry:182 tail call void (...) @sink(i32 noundef %i)183 ret void184}185 186; Function Attrs: nounwind187define void @pass_int_s1(i32 noundef %i, i8 %x.coerce) {188; CHECK-LABEL: pass_int_s1:189; CHECK: .functype pass_int_s1 (i32, i32) -> ()190; CHECK-NEXT: .local i32191; CHECK-NEXT: # %bb.0: # %entry192; CHECK-NEXT: global.get __stack_pointer193; CHECK-NEXT: i32.const 16194; CHECK-NEXT: i32.sub195; CHECK-NEXT: local.tee 2196; CHECK-NEXT: global.set __stack_pointer197; CHECK-NEXT: local.get 2198; CHECK-NEXT: local.get 1199; CHECK-NEXT: i32.store 4200; CHECK-NEXT: local.get 2201; CHECK-NEXT: local.get 0202; CHECK-NEXT: i32.store 0203; CHECK-NEXT: local.get 2204; CHECK-NEXT: call sink205; CHECK-NEXT: local.get 2206; CHECK-NEXT: i32.const 16207; CHECK-NEXT: i32.add208; CHECK-NEXT: global.set __stack_pointer209; CHECK-NEXT: # fallthrough-return210entry:211 tail call void (...) @sink(i32 noundef %i, i8 %x.coerce)212 ret void213}214 215; Function Attrs: nounwind216define void @pass_int_s2(i32 noundef %i, i16 %x.coerce) {217; CHECK-LABEL: pass_int_s2:218; CHECK: .functype pass_int_s2 (i32, i32) -> ()219; CHECK-NEXT: .local i32220; CHECK-NEXT: # %bb.0: # %entry221; CHECK-NEXT: global.get __stack_pointer222; CHECK-NEXT: i32.const 16223; CHECK-NEXT: i32.sub224; CHECK-NEXT: local.tee 2225; CHECK-NEXT: global.set __stack_pointer226; CHECK-NEXT: local.get 2227; CHECK-NEXT: local.get 1228; CHECK-NEXT: i32.store 4229; CHECK-NEXT: local.get 2230; CHECK-NEXT: local.get 0231; CHECK-NEXT: i32.store 0232; CHECK-NEXT: local.get 2233; CHECK-NEXT: call sink234; CHECK-NEXT: local.get 2235; CHECK-NEXT: i32.const 16236; CHECK-NEXT: i32.add237; CHECK-NEXT: global.set __stack_pointer238; CHECK-NEXT: # fallthrough-return239entry:240 tail call void (...) @sink(i32 noundef %i, i16 %x.coerce)241 ret void242}243 244; Function Attrs: nounwind245define void @pass_int_s3(i32 noundef %i, i32 %x.coerce) {246; CHECK-LABEL: pass_int_s3:247; CHECK: .functype pass_int_s3 (i32, i32) -> ()248; CHECK-NEXT: .local i32249; CHECK-NEXT: # %bb.0: # %entry250; CHECK-NEXT: global.get __stack_pointer251; CHECK-NEXT: i32.const 16252; CHECK-NEXT: i32.sub253; CHECK-NEXT: local.tee 2254; CHECK-NEXT: global.set __stack_pointer255; CHECK-NEXT: local.get 2256; CHECK-NEXT: local.get 1257; CHECK-NEXT: i32.store 4258; CHECK-NEXT: local.get 2259; CHECK-NEXT: local.get 0260; CHECK-NEXT: i32.store 0261; CHECK-NEXT: local.get 2262; CHECK-NEXT: call sink263; CHECK-NEXT: local.get 2264; CHECK-NEXT: i32.const 16265; CHECK-NEXT: i32.add266; CHECK-NEXT: global.set __stack_pointer267; CHECK-NEXT: # fallthrough-return268entry:269 tail call void (...) @sink(i32 noundef %i, i32 %x.coerce)270 ret void271}272 273; Function Attrs: nounwind274define void @pass_int_s4(i32 noundef %i, i64 %x.coerce) {275; CHECK-LABEL: pass_int_s4:276; CHECK: .functype pass_int_s4 (i32, i64) -> ()277; CHECK-NEXT: .local i32278; CHECK-NEXT: # %bb.0: # %entry279; CHECK-NEXT: global.get __stack_pointer280; CHECK-NEXT: i32.const 16281; CHECK-NEXT: i32.sub282; CHECK-NEXT: local.tee 2283; CHECK-NEXT: global.set __stack_pointer284; CHECK-NEXT: local.get 2285; CHECK-NEXT: local.get 1286; CHECK-NEXT: i64.store 8287; CHECK-NEXT: local.get 2288; CHECK-NEXT: local.get 0289; CHECK-NEXT: i32.store 0290; CHECK-NEXT: local.get 2291; CHECK-NEXT: call sink292; CHECK-NEXT: local.get 2293; CHECK-NEXT: i32.const 16294; CHECK-NEXT: i32.add295; CHECK-NEXT: global.set __stack_pointer296; CHECK-NEXT: # fallthrough-return297entry:298 tail call void (...) @sink(i32 noundef %i, i64 %x.coerce)299 ret void300}301 302; Function Attrs: nounwind303define void @pass_int_s5(i32 noundef %i, <4 x i32> noundef %x) {304; CHECK-LABEL: pass_int_s5:305; CHECK: .functype pass_int_s5 (i32, i32, i32, i32, i32) -> ()306; CHECK-NEXT: .local i32307; CHECK-NEXT: # %bb.0: # %entry308; CHECK-NEXT: global.get __stack_pointer309; CHECK-NEXT: i32.const 32310; CHECK-NEXT: i32.sub311; CHECK-NEXT: local.tee 5312; CHECK-NEXT: global.set __stack_pointer313; CHECK-NEXT: local.get 5314; CHECK-NEXT: i32.const 28315; CHECK-NEXT: i32.add316; CHECK-NEXT: local.get 4317; CHECK-NEXT: i32.store 0318; CHECK-NEXT: local.get 5319; CHECK-NEXT: i32.const 24320; CHECK-NEXT: i32.add321; CHECK-NEXT: local.get 3322; CHECK-NEXT: i32.store 0323; CHECK-NEXT: local.get 5324; CHECK-NEXT: i32.const 20325; CHECK-NEXT: i32.add326; CHECK-NEXT: local.get 2327; CHECK-NEXT: i32.store 0328; CHECK-NEXT: local.get 5329; CHECK-NEXT: i32.const 16330; CHECK-NEXT: i32.add331; CHECK-NEXT: local.get 1332; CHECK-NEXT: i32.store 0333; CHECK-NEXT: local.get 5334; CHECK-NEXT: local.get 0335; CHECK-NEXT: i32.store 0336; CHECK-NEXT: local.get 5337; CHECK-NEXT: call sink338; CHECK-NEXT: local.get 5339; CHECK-NEXT: i32.const 32340; CHECK-NEXT: i32.add341; CHECK-NEXT: global.set __stack_pointer342; CHECK-NEXT: # fallthrough-return343entry:344 tail call void (...) @sink(i32 noundef %i, <4 x i32> noundef %x)345 ret void346}347 348; Function Attrs: nounwind349define void @pass_asc(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) {350; CHECK-LABEL: pass_asc:351; CHECK: .functype pass_asc (i32, i32, i32, i64, i32, i32, i32, i32) -> ()352; CHECK-NEXT: .local i32353; CHECK-NEXT: # %bb.0: # %entry354; CHECK-NEXT: global.get __stack_pointer355; CHECK-NEXT: i32.const 48356; CHECK-NEXT: i32.sub357; CHECK-NEXT: local.tee 8358; CHECK-NEXT: global.set __stack_pointer359; CHECK-NEXT: local.get 8360; CHECK-NEXT: i32.const 44361; CHECK-NEXT: i32.add362; CHECK-NEXT: local.get 7363; CHECK-NEXT: i32.store 0364; CHECK-NEXT: local.get 8365; CHECK-NEXT: i32.const 40366; CHECK-NEXT: i32.add367; CHECK-NEXT: local.get 6368; CHECK-NEXT: i32.store 0369; CHECK-NEXT: local.get 8370; CHECK-NEXT: i32.const 36371; CHECK-NEXT: i32.add372; CHECK-NEXT: local.get 5373; CHECK-NEXT: i32.store 0374; CHECK-NEXT: local.get 8375; CHECK-NEXT: i32.const 32376; CHECK-NEXT: i32.add377; CHECK-NEXT: local.get 4378; CHECK-NEXT: i32.store 0379; CHECK-NEXT: local.get 8380; CHECK-NEXT: i32.const 16381; CHECK-NEXT: i32.add382; CHECK-NEXT: local.get 3383; CHECK-NEXT: i64.store 0384; CHECK-NEXT: local.get 8385; CHECK-NEXT: local.get 2386; CHECK-NEXT: i32.store 8387; CHECK-NEXT: local.get 8388; CHECK-NEXT: local.get 1389; CHECK-NEXT: i32.store 4390; CHECK-NEXT: local.get 8391; CHECK-NEXT: local.get 0392; CHECK-NEXT: i32.store 0393; CHECK-NEXT: local.get 8394; CHECK-NEXT: call sink395; CHECK-NEXT: local.get 8396; CHECK-NEXT: i32.const 48397; CHECK-NEXT: i32.add398; CHECK-NEXT: global.set __stack_pointer399; CHECK-NEXT: # fallthrough-return400entry:401 tail call void (...) @sink(i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5)402 ret void403}404 405; Function Attrs: nounwind406define void @pass_dsc(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce) {407; CHECK-LABEL: pass_dsc:408; CHECK: .functype pass_dsc (i32, i32, i32, i32, i64, i32, i32, i32) -> ()409; CHECK-NEXT: .local i32410; CHECK-NEXT: # %bb.0: # %entry411; CHECK-NEXT: global.get __stack_pointer412; CHECK-NEXT: i32.const 48413; CHECK-NEXT: i32.sub414; CHECK-NEXT: local.tee 8415; CHECK-NEXT: global.set __stack_pointer416; CHECK-NEXT: local.get 8417; CHECK-NEXT: i32.const 32418; CHECK-NEXT: i32.add419; CHECK-NEXT: local.get 7420; CHECK-NEXT: i32.store 0421; CHECK-NEXT: local.get 8422; CHECK-NEXT: i32.const 28423; CHECK-NEXT: i32.add424; CHECK-NEXT: local.get 6425; CHECK-NEXT: i32.store 0426; CHECK-NEXT: local.get 8427; CHECK-NEXT: i32.const 24428; CHECK-NEXT: i32.add429; CHECK-NEXT: local.get 5430; CHECK-NEXT: i32.store 0431; CHECK-NEXT: local.get 8432; CHECK-NEXT: i32.const 16433; CHECK-NEXT: i32.add434; CHECK-NEXT: local.get 4435; CHECK-NEXT: i64.store 0436; CHECK-NEXT: local.get 8437; CHECK-NEXT: local.get 3438; CHECK-NEXT: i32.store 12439; CHECK-NEXT: local.get 8440; CHECK-NEXT: local.get 2441; CHECK-NEXT: i32.store 8442; CHECK-NEXT: local.get 8443; CHECK-NEXT: local.get 1444; CHECK-NEXT: i32.store 4445; CHECK-NEXT: local.get 8446; CHECK-NEXT: local.get 0447; CHECK-NEXT: i32.store 0448; CHECK-NEXT: local.get 8449; CHECK-NEXT: call sink450; CHECK-NEXT: local.get 8451; CHECK-NEXT: i32.const 48452; CHECK-NEXT: i32.add453; CHECK-NEXT: global.set __stack_pointer454; CHECK-NEXT: # fallthrough-return455entry:456 tail call void (...) @sink(<4 x i32> noundef %x0, i64 %x1.coerce, i32 %x2.coerce, i16 %x3.coerce, i8 %x4.coerce)457 ret void458}459 460; Function Attrs: nounwind461define void @pass_multiple(i32 noundef %i, i8 %x1.coerce, i16 %x2.coerce, i32 %x3.coerce, i64 %x4.coerce, <4 x i32> noundef %x5) {462; CHECK-LABEL: pass_multiple:463; CHECK: .functype pass_multiple (i32, i32, i32, i32, i64, i32, i32, i32, i32) -> ()464; CHECK-NEXT: .local i32465; CHECK-NEXT: # %bb.0: # %entry466; CHECK-NEXT: global.get __stack_pointer467; CHECK-NEXT: i32.const 48468; CHECK-NEXT: i32.sub469; CHECK-NEXT: local.tee 9470; CHECK-NEXT: global.set __stack_pointer471; CHECK-NEXT: local.get 9472; CHECK-NEXT: local.get 4473; CHECK-NEXT: i64.store 40474; CHECK-NEXT: local.get 9475; CHECK-NEXT: local.get 2476; CHECK-NEXT: i32.store 36477; CHECK-NEXT: local.get 9478; CHECK-NEXT: local.get 0479; CHECK-NEXT: i32.store 32480; CHECK-NEXT: local.get 9481; CHECK-NEXT: i32.const 32482; CHECK-NEXT: i32.add483; CHECK-NEXT: call sink484; CHECK-NEXT: local.get 9485; CHECK-NEXT: i32.const 28486; CHECK-NEXT: i32.add487; CHECK-NEXT: local.get 8488; CHECK-NEXT: i32.store 0489; CHECK-NEXT: local.get 9490; CHECK-NEXT: i32.const 24491; CHECK-NEXT: i32.add492; CHECK-NEXT: local.get 7493; CHECK-NEXT: i32.store 0494; CHECK-NEXT: local.get 9495; CHECK-NEXT: i32.const 20496; CHECK-NEXT: i32.add497; CHECK-NEXT: local.get 6498; CHECK-NEXT: i32.store 0499; CHECK-NEXT: local.get 9500; CHECK-NEXT: i32.const 16501; CHECK-NEXT: i32.add502; CHECK-NEXT: local.get 5503; CHECK-NEXT: i32.store 0504; CHECK-NEXT: local.get 9505; CHECK-NEXT: local.get 3506; CHECK-NEXT: i32.store 8507; CHECK-NEXT: local.get 9508; CHECK-NEXT: local.get 1509; CHECK-NEXT: i32.store 4510; CHECK-NEXT: local.get 9511; CHECK-NEXT: local.get 0512; CHECK-NEXT: i32.store 0513; CHECK-NEXT: local.get 9514; CHECK-NEXT: call sink515; CHECK-NEXT: local.get 9516; CHECK-NEXT: i32.const 48517; CHECK-NEXT: i32.add518; CHECK-NEXT: global.set __stack_pointer519; CHECK-NEXT: # fallthrough-return520entry:521 tail call void (...) @sink(i32 noundef %i, i16 %x2.coerce, i64 %x4.coerce)522 tail call void (...) @sink(i32 noundef %i, i8 %x1.coerce, i32 %x3.coerce, <4 x i32> noundef %x5)523 ret void524}525 526