]>
git.proxmox.com Git - rustc.git/blob - compiler/rustc_codegen_cranelift/src/analyze.rs
5 use rustc_index
::vec
::IndexVec
;
6 use rustc_middle
::mir
::StatementKind
::*;
8 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
9 pub(crate) enum SsaKind
{
14 pub(crate) fn analyze(fx
: &FunctionCx
<'_
, '_
, '_
>) -> IndexVec
<Local
, SsaKind
> {
20 let ty
= fx
.monomorphize(local_decl
.ty
);
21 if fx
.clif_type(ty
).is_some() || fx
.clif_pair_type(ty
).is_some() {
27 .collect
::<IndexVec
<Local
, SsaKind
>>();
29 for bb
in fx
.mir
.basic_blocks().iter() {
30 for stmt
in bb
.statements
.iter() {
32 Assign(place_and_rval
) => match &place_and_rval
.1 {
33 Rvalue
::Ref(_
, _
, place
) | Rvalue
::AddressOf(_
, place
) => {
34 not_ssa(&mut flag_map
, place
.local
)
46 fn not_ssa(flag_map
: &mut IndexVec
<Local
, SsaKind
>, local
: Local
) {
47 flag_map
[local
] = SsaKind
::NotSsa
;