You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit d8325c6
Browse filesBrowse the repository at this point in the historyBrowse files
(#023). See [Upstream PRs](#upstream-prs) for links.
29
29
30
30
The adversarial pass earned its keep: it correctly **rejected** several
31
31
plausible-looking candidates (PTX `min`/`max`*do* order signed zeros per ISA
@@ -40,7 +40,7 @@ are listed at the bottom.
40
40
-**#022** — scoped `atomicMax_block`/`Min` on **unsigned** lowers to a **signed**`atom.max.s32`. *(fixed: [#200735](https://github.com/llvm/llvm-project/pull/200735), merged)*
41
41
-**#031** — a `volatile` load gets tagged `!invariant.load` and lowered to `ld.global.nc`, dropping volatile.
42
42
-**#056** — a `blockaddress` nested in an aggregate global is emitted as all-zero bytes (relocation dropped).
43
-
-**#058** — a non-power-of-2 vector struct field (`<3 x i32>`) drops its tail padding, shifting later fields (trailing `i32` lands at byte 12 not 16). *(fix: [#201246](https://github.com/llvm/llvm-project/pull/201246), open)*
43
+
-**#058** — a non-power-of-2 vector struct field (`<3 x i32>`) drops its tail padding, shifting later fields (trailing `i32` lands at byte 12 not 16). *(fixed: [#201246](https://github.com/llvm/llvm-project/pull/201246), merged)*
44
44
45
45
### Upstream PRs
46
46
@@ -56,10 +56,10 @@ Fixes filed against `llvm/llvm-project` for bugs above. *Merged* has landed on
56
56
| 014 |[#201184](https://github.com/llvm/llvm-project/pull/201184) — Print the full value of e.g. an i65 global | merged |
Copy file name to clipboardExpand all lines: x86/README.md
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -60,7 +60,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
60
60
| 011 |[011-ldexp-i64-libcall-silent-truncation](bugs/011-ldexp-i64-libcall-silent-truncation/) - `llvm.ldexp.f64.i64` silently truncates exponent to int on libcall (POWI errors here, LDEXP didn't get the guard) | PR [#199177](https://github.com/llvm/llvm-project/pull/199177) closed (not merged) |
61
61
| 012 |[012-cgp-splitmergedvalstore-strips-atomic](bugs/012-cgp-splitmergedvalstore-strips-atomic/) - bail-out checks only `isVolatile()`; an atomic seq_cst i64 store is split into two non-atomic i32 stores | PR [#199592](https://github.com/llvm/llvm-project/pull/199592) merged |
62
62
| 013 |[013-instcombine-vector-reduce-mul-sext-i1-odd-lanes](bugs/013-instcombine-vector-reduce-mul-sext-i1-odd-lanes/) - `vector_reduce_mul(sext(<n x i1>))` folded to `zext(and-reduce(V))`; for odd n, all-true → +1 instead of -1 | PR [#199401](https://github.com/llvm/llvm-project/pull/199401) merged |
| 015 |[015-sfb-volatile-atomic-not-checked](bugs/015-sfb-volatile-atomic-not-checked/) - pass never checks `isVolatile()`/`isAtomic()` MMO flags; a volatile 16-byte XMM copy can be silently split | PR [#199698](https://github.com/llvm/llvm-project/pull/199698) merged |
65
65
| 016 |[016-vzeroupper-clobbersall-misses-ymm-zmm-16-31](bugs/016-vzeroupper-clobbersall-misses-ymm-zmm-16-31/) - `clobbersAllYmmAndZmmRegs` only iterates YMM/ZMM 0-15; upper bank invisible to dirty-state analysis ||
66
66
| 017 |[017-atomicexpand-widenpartword-drops-volatile](bugs/017-atomicexpand-widenpartword-drops-volatile/) - `widenPartwordAtomicRMW` never calls `setVolatile(...)` on the widened RMW; sole outlier of all RMW expansion paths | PR [#199722](https://github.com/llvm/llvm-project/pull/199722) merged |
@@ -70,7 +70,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
70
70
| 021 |[021-compress-evex-vpmov-physreg-use-operands-noop](bugs/021-compress-evex-vpmov-physreg-use-operands-noop/) - post-RA `MRI->use_operands(MaskReg)` on a physical kreg is a no-op; cross-BB live-out $k0 left uninitialized ||
| 023 |[023-foldfptoi-mask-asymmetric-fcposnormal](bugs/023-foldfptoi-mask-asymmetric-fcposnormal/) - uses `fcPosNormal` for fptoui but `fcNormal` for fptosi; negative-normal fptoui poison-refined to 0 ||
73
-
| 024 |[024-foldshuffleofshuffles-poison-bool-cast](bugs/024-foldshuffleofshuffles-poison-bool-cast/) - `if (!NewX) return PoisonValue::get(Ty);` inside a `bool`-returning function; success path claimed without replaceValue ||
| 025 |[025-machinesink-physdef-dead-not-zombie-checked](bugs/025-machinesink-physdef-dead-not-zombie-checked/) - EFLAGS guard trusts stale `dead` flag; doesn't scan source-block tail for late reader of the supposedly-dead physreg ||
75
75
| 026 |[026-machinelicm-throwing-inline-asm-speculation](bugs/026-machinelicm-throwing-inline-asm-speculation/) - only checks dominator-of-exiting-blocks; ignores intra-loop throwing/INLINEASM-sideeffect — loads hoisted past faulting asm ||
76
76
| 027 |[027-machinecse-implicit-def-positional-mismatch](bugs/027-machinecse-implicit-def-positional-mismatch/) - positional indexing into `CSMI->getOperand(i)` assumes MI/CSMI have identical operand layouts ||
@@ -180,7 +180,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
180
180
| 144 |[144-licm-promote-merges-mismatched-syncscopes](bugs/144-licm-promote-merges-mismatched-syncscopes/) - atomic accesses w/ mismatched syncscopes promoted to single System-scope load+store; original singlethread contract lost ||
181
181
| 145 |[145-gvn-pre-drops-loadinst-metadata](bugs/145-gvn-pre-drops-loadinst-metadata/) - hand-rolled metadata whitelist drops `!noundef`/`!align`/`!dereferenceable`/`!nonnull`/`!nontemporal`/`!alias.scope` on PRE'd load | local branch `fix6-gvn-pre-load-metadata` (draft, not pushed) |
182
182
| 146 |[146-gvn-createExpr-ignores-IRFlags](bugs/146-gvn-createExpr-ignores-IRFlags/) - CSE keys on (Ty, Opcode, VarArgs) only; kept instr loses `nsw`/`nuw`/`disjoint`/`exact`/`inbounds`/FMF via `patchAndReplaceAllUsesWith`|**WONTFIX** — sound flag-stripping (missed-opt only). `patchAndReplaceAllUsesWith` intersects flags so the IR stays correct; GVN intentionally value-numbers without IR flags. |
| 148 |[148-vectorcombine-scalarizeLoadExtract-strips-atomic](bugs/148-vectorcombine-scalarizeLoadExtract-strips-atomic/) - atomic unordered vector load → N plain non-atomic scalar loads; no-torn-read guarantee broken (`-O3` default pipeline) | PR [#200263](https://github.com/llvm/llvm-project/pull/200263) merged — same root cause as 190/191, all three fixed by the `isVolatile`→`!isSimple` gate change |
185
185
| 149 |[149-dse-partial-merge-drops-nontemporal](bugs/149-dse-partial-merge-drops-nontemporal/) - drops `!nontemporal` metadata when merging (sibling of #108 atomic gap) ||
186
186
| 150 |[150-memcpyopt-trymerge-drops-nontemporal-hint](bugs/150-memcpyopt-trymerge-drops-nontemporal-hint/) - bails when start store has `!nontemporal` but inner forward-scan ignores it; subsequent nontemporal stores merged into plain memset, hardware hint lost ||
@@ -195,7 +195,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
195
195
| 160 |[160-licm-promote-merges-store-only-mismatched-syncscopes](bugs/160-licm-promote-merges-store-only-mismatched-syncscopes/) - two unordered atomic STORES w/ mismatched syncscopes merged to one System-scope store; distinct from #144 (load+store) ||
196
196
| 161 |[161-licm-promote-merges-load-only-mismatched-syncscopes](bugs/161-licm-promote-merges-load-only-mismatched-syncscopes/) - two unordered atomic LOADS w/ mismatched syncscopes merged to one System-scope load; distinct from #144||
197
197
| 162 |[162-gvnsink-merges-deopt-bundle-operands-via-phi](bugs/162-gvnsink-merges-deopt-bundle-operands-via-phi/) - non-const deopt bundle operand can be PHI'd; sunk call has per-path deopt value replaced by runtime select |**WONTFIX** — see WONTFIX catalog below |
198
-
| 163 |[163-instcombine-load-retype-drops-invariant-group](bugs/163-instcombine-load-retype-drops-invariant-group/) - `!invariant.group` dropped on load retype; missing case in switch (compare combineMetadata which does handle it) | PR [#200535](https://github.com/llvm/llvm-project/pull/200535)(draft; adds `MD_invariant_group` to `copyMetadataForLoad`) |
198
+
| 163 |[163-instcombine-load-retype-drops-invariant-group](bugs/163-instcombine-load-retype-drops-invariant-group/) - `!invariant.group` dropped on load retype; missing case in switch (compare combineMetadata which does handle it) | PR [#200535](https://github.com/llvm/llvm-project/pull/200535)merged (adds `MD_invariant_group` to `copyMetadataForLoad`) |
199
199
| 164 |[164-mem2reg-convertmetadatatoassumes-drops-range-align-deref](bugs/164-mem2reg-convertmetadatatoassumes-drops-range-align-deref/) - only converts `!nonnull`/`!noundef`; `!range`, `!align`, `!dereferenceable`, `!invariant.load`, AA metadata silently dropped ||
200
200
| 165 |[165-instcombine-load-of-select-drops-noundef-invariant-load-nontemporal](bugs/165-instcombine-load-of-select-drops-noundef-invariant-load-nontemporal/) - only copies `Metadata::PoisonGeneratingIDs` to split loads; drops `!noundef`/`!invariant.load`/`!nontemporal`/`!tbaa`/`!alias.scope`/`!dereferenceable`| local branch `fix6-load-of-select-md` (draft, not pushed) |
201
201
| 167 |[167-gvnhoist-alias-scope-union-extra-membership](bugs/167-gvnhoist-alias-scope-union-extra-membership/) - hoisted load tagged with UNION of `!alias.scope` from both branches; claims membership originals never had → unsound AA queries |**WONTFIX** — does not reproduce at HEAD: GVNHoist uses `combineMetadataForCSE`, which *intersects*`!alias.scope` via `getMostGenericAliasScope` (not union). |
@@ -218,7 +218,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
218
218
| 190 |[190-vectorcombine-scalarizeLoadBitcast-strips-atomic](bugs/190-vectorcombine-scalarizeLoadBitcast-strips-atomic/) - sibling of #148: atomic vector load that feeds only bitcast users → plain non-atomic scalar load via CreateLoad + copyMetadata | PR [#200263](https://github.com/llvm/llvm-project/pull/200263) merged — same root cause as 148/191, all three fixed by the `isVolatile`→`!isSimple` gate change |
219
219
| 191 |[191-vectorcombine-scalarizeLoad-infloop-on-strong-atomic](bugs/191-vectorcombine-scalarizeLoad-infloop-on-strong-atomic/) - `monotonic`/`acquire`/`seq_cst` atomic vector load → opt hangs at 100% CPU (worklist re-pushes the surviving original load forever) | PR [#200263](https://github.com/llvm/llvm-project/pull/200263) merged — same root cause as 148/190, all three fixed by the `isVolatile`→`!isSimple` gate change |
220
220
| 192 |[192-simplifycfg-mergeCondStores-drops-nontemporal](bugs/192-simplifycfg-mergeCondStores-drops-nontemporal/) - merged store drops `!nontemporal` when only one of the paired stores carried it ||
221
-
| 193 |[193-simplifycfg-mergeCondStores-spreads-invariant-group](bugs/193-simplifycfg-mergeCondStores-spreads-invariant-group/) - `!invariant.group` from one store leaks onto the merged store carrying the other branch's value | PR [#200551](https://github.com/llvm/llvm-project/pull/200551)(open); LangRef clarification [#200552](https://github.com/llvm/llvm-project/pull/200552) (open) |
221
+
| 193 |[193-simplifycfg-mergeCondStores-spreads-invariant-group](bugs/193-simplifycfg-mergeCondStores-spreads-invariant-group/) - `!invariant.group` from one store leaks onto the merged store carrying the other branch's value | PR [#200551](https://github.com/llvm/llvm-project/pull/200551)merged; LangRef clarification [#200552](https://github.com/llvm/llvm-project/pull/200552) (open) |
222
222
| 195 |[195-instcombine-ldexp-chain-integer-overflow](bugs/195-instcombine-ldexp-chain-integer-overflow/) - `ldexp(ldexp(x, INT_MAX), INT_MAX)` → `fmul x, 0.25` (i32 exponent sum wraps to -2 inverting overflow→underflow); should be `+inf`| PR [#199274](https://github.com/llvm/llvm-project/pull/199274) merged |
223
223
| 196 |[196-dagcombiner-trystoremergeofloads-drops-aamd](bugs/196-dagcombiner-trystoremergeofloads-drops-aamd/) - merged wide load+store has no `!tbaa`/`!alias.scope`/`!noalias` (4-arg getLoad/getStore overloads drop AAInfo) | local branch `fix6-dag-storemergeofloads-aainfo` (draft, not pushed) |
224
224
| 198 |[198-dagcombiner-reduceloadopstorewidth-store-drops-aamd](bugs/198-dagcombiner-reduceloadopstorewidth-store-drops-aamd/) - asymmetric MMO loss: load-side keeps NT/tbaa, store-side drops both — visible in `OR8mi` MMOs | local branch `fix6-dag-reduceloadopstorewidth-aainfo` (draft, not pushed) |
@@ -266,7 +266,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
266
266
| 245 |[245-instcombine-unpack-aggregate-drops-nontemporal-extra](bugs/245-instcombine-unpack-aggregate-drops-nontemporal-extra/) - full enumeration of dropped kinds: `!nontemporal`, `!access_group`, `!invariant.group`, `!mem_parallel_loop_access`, `!DIAssignID`||
| 249 |[249-function-attrs-ignores-operand-bundles](bugs/249-function-attrs-ignores-operand-bundles/) - predicates use `CallBase::hasFnAttr` which ignores operand bundles; caller with `[ "side_effects"() ]` on leaf still infers `nofree nosync nounwind willreturn`|**WONTFIX** — see WONTFIX catalog below |
269
-
| 250 |[250-simplifycfg-mergeConditionalStoreToAddress-drops-pstore-metadata](bugs/250-simplifycfg-mergeConditionalStoreToAddress-drops-pstore-metadata/) - asymmetric combineMetadata + `SI->copyMetadata(*QStore)` drops PStore-only `!nontemporal`/`!tbaa`/...; `!invariant.group` special-case can taint merged store | PR [#200551](https://github.com/llvm/llvm-project/pull/200551)(open)|
269
+
| 250 |[250-simplifycfg-mergeConditionalStoreToAddress-drops-pstore-metadata](bugs/250-simplifycfg-mergeConditionalStoreToAddress-drops-pstore-metadata/) - asymmetric combineMetadata + `SI->copyMetadata(*QStore)` drops PStore-only `!nontemporal`/`!tbaa`/...; `!invariant.group` special-case can taint merged store | PR [#200551](https://github.com/llvm/llvm-project/pull/200551)merged|
270
270
| 252 |[252-jumpthreading-unfoldSelectInstr-branches-on-poison](bugs/252-jumpthreading-unfoldSelectInstr-branches-on-poison/) - original safely freezes potentially-poison condition before branching; after JT, the freeze is gone and `br i1 %maybe_poison` is direct UB | PR [#199408](https://github.com/llvm/llvm-project/pull/199408) merged (+ NFC follow-up [#199718](https://github.com/llvm/llvm-project/pull/199718)) |
271
271
| 254 |[254-x86-fmaximum-fminimum-fp128-ice](bugs/254-x86-fmaximum-fminimum-fp128-ice/) - `llvm.maximum.f128`/`llvm.minimum.f128` (+ `vector.reduce.f{max,min}imum.vNf128`) ICE in LegalizeDAG (`setcc` on i128 bitcast left illegal); default mattr |**WONTFIX** — see WONTFIX catalog below |
272
272
| 255 |[255-x86-strict-bf16-arith-ice](bugs/255-x86-strict-bf16-arith-ice/) - strict-fp `constrained.fadd/.../.bf16` ICE: `SoftPromoteHalfResult` has no strict-arith bf16 case — "soft promote ... result!"; default mattr |**WONTFIX** (strict-fp, deprecating) |
0 commit comments