From 1b71285b34d6bbbbc718523a795e525f971bd6a6 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Wed, 25 Oct 2017 13:34:55 -0700 Subject: [PATCH] Return bools in GPR registers. Boolean types are returned in %rax, so regclass_for_abi_type() should return GPR. Fixes #179. --- cranelift/filetests/isa/intel/abi-bool.cton | 20 ++++++++++++++++++++ lib/cretonne/src/isa/intel/abi.rs | 6 +++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 cranelift/filetests/isa/intel/abi-bool.cton diff --git a/cranelift/filetests/isa/intel/abi-bool.cton b/cranelift/filetests/isa/intel/abi-bool.cton new file mode 100644 index 0000000000..bc1a1ba1d5 --- /dev/null +++ b/cranelift/filetests/isa/intel/abi-bool.cton @@ -0,0 +1,20 @@ +test compile +set is_64bit=1 +isa intel haswell + +function %foo(i64, i64, i64, i32) -> b1 native { +ebb3(v0: i64, v1: i64, v2: i64, v3: i32): + v5 = icmp ne v2, v2 + v8 = iconst.i64 0 + jump ebb2(v8, v3, v5) + +ebb2(v10: i64, v30: i32, v37: b1): + v18 = load.i32 notrap aligned v2 + v27 = iadd.i64 v10, v10 + v31 = icmp eq v30, v30 + brz v31, ebb2(v27, v30, v37) + jump ebb0(v37) + +ebb0(v35: b1): + return v35 +} diff --git a/lib/cretonne/src/isa/intel/abi.rs b/lib/cretonne/src/isa/intel/abi.rs index ec623feed8..4b247b5a13 100644 --- a/lib/cretonne/src/isa/intel/abi.rs +++ b/lib/cretonne/src/isa/intel/abi.rs @@ -125,7 +125,11 @@ pub fn legalize_signature(sig: &mut ir::Signature, flags: &shared_settings::Flag /// Get register class for a type appearing in a legalized signature. pub fn regclass_for_abi_type(ty: ir::Type) -> RegClass { - if ty.is_int() { GPR } else { FPR } + if ty.is_int() || ty.is_bool() { + GPR + } else { + FPR + } } /// Get the set of allocatable registers for `func`.