| 1209 | use target_lexicon::PointerWidth; |
| 1210 | |
| 1211 | fn sample_function(lazy_seal: bool) { |
| 1212 | let mut sig = Signature::new(CallConv::SystemV); |
| 1213 | sig.returns.push(AbiParam::new(I32)); |
| 1214 | sig.params.push(AbiParam::new(I32)); |
| 1215 | |
| 1216 | let mut fn_ctx = FunctionBuilderContext::new(); |
| 1217 | let mut func = Function::with_name_signature(UserFuncName::testcase("sample"), sig); |
| 1218 | { |
| 1219 | let mut builder = FunctionBuilder::new(&mut func, &mut fn_ctx); |
| 1220 | |
| 1221 | let block0 = builder.create_block(); |
| 1222 | let block1 = builder.create_block(); |
| 1223 | let block2 = builder.create_block(); |
| 1224 | let block3 = builder.create_block(); |
| 1225 | let x = builder.declare_var(I32); |
| 1226 | let y = builder.declare_var(I32); |
| 1227 | let z = builder.declare_var(I32); |
| 1228 | |
| 1229 | builder.append_block_params_for_function_params(block0); |
| 1230 | |
| 1231 | builder.switch_to_block(block0); |
| 1232 | if !lazy_seal { |
| 1233 | builder.seal_block(block0); |
| 1234 | } |
| 1235 | { |
| 1236 | let tmp = builder.block_params(block0)[0]; // the first function parameter |
| 1237 | builder.def_var(x, tmp); |
| 1238 | } |
| 1239 | { |
| 1240 | let tmp = builder.ins().iconst(I32, 2); |
| 1241 | builder.def_var(y, tmp); |
| 1242 | } |
| 1243 | { |
| 1244 | let arg1 = builder.use_var(x); |
| 1245 | let arg2 = builder.use_var(y); |
| 1246 | let tmp = builder.ins().iadd(arg1, arg2); |
| 1247 | builder.def_var(z, tmp); |
| 1248 | } |
| 1249 | builder.ins().jump(block1, &[]); |
| 1250 | |
| 1251 | builder.switch_to_block(block1); |
| 1252 | { |
| 1253 | let arg1 = builder.use_var(y); |
| 1254 | let arg2 = builder.use_var(z); |
| 1255 | let tmp = builder.ins().iadd(arg1, arg2); |
| 1256 | builder.def_var(z, tmp); |
| 1257 | } |
| 1258 | { |
| 1259 | let arg = builder.use_var(y); |
| 1260 | builder.ins().brif(arg, block3, &[], block2, &[]); |
| 1261 | } |
| 1262 | |
| 1263 | builder.switch_to_block(block2); |
| 1264 | if !lazy_seal { |
| 1265 | builder.seal_block(block2); |
| 1266 | } |
| 1267 | { |
| 1268 | let arg1 = builder.use_var(z); |