aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/compiler
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-06-30 13:27:24 +0200
committerDmitry Vyukov <dvyukov@google.com>2018-06-30 13:27:24 +0200
commit5012ddc8ebeb996abdf6da94fbd489420860d5e9 (patch)
treef1a03b439e94c3c2a6b4427c13b3db5765272562 /pkg/compiler
parent906b9e38f1042fb822a8b568e3633b575a8bc71d (diff)
prog: detect when flags are a bitmask
Diffstat (limited to 'pkg/compiler')
-rw-r--r--pkg/compiler/types.go13
1 files changed, 12 insertions, 1 deletions
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,
}
},
}