From 5012ddc8ebeb996abdf6da94fbd489420860d5e9 Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Sat, 30 Jun 2018 13:27:24 +0200 Subject: prog: detect when flags are a bitmask --- pkg/compiler/types.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'pkg/compiler') diff --git a/pkg/compiler/types.go b/pkg/compiler/types.go index 97f7d18c4..c41ce4bdf 100644 --- a/pkg/compiler/types.go +++ b/pkg/compiler/types.go @@ -244,9 +244,20 @@ var typeFlags = &typeDesc{ Kind: prog.IntPlain, } } + bitmask := true + var combined uint64 + values := genIntArray(f.Values) + for _, v := range values { + if v&combined != 0 { + bitmask = false + break + } + combined |= v + } return &prog.FlagsType{ IntTypeCommon: base, - Vals: genIntArray(f.Values), + Vals: values, + BitMask: bitmask, } }, } -- cgit mrf-deployment