Skip to content

Commit d8325c6

Browse files
committed
Update PR statuses
1 parent 1a8f46f commit d8325c6

2 files changed

Lines changed: 14 additions & 14 deletions

File tree

‎NVPTX/README.md‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ fan-out rounds of code reading. Every entry was reproduced with a freshly built
2323
NVPTX-enabled `llc`/`opt`; the miscompiles and early crashes were additionally put
2424
through an independent adversarial "try to refute it" pass before being listed here.
2525

26-
**Upstream:** 11 fix PRs filed against `llvm/llvm-project` so far — **6 merged**
27-
(#001, #002, #003/#020, #007, #014, #022) and **5 open** (#023, #028, #029,
28-
#033, #058). See [Upstream PRs](#upstream-prs) for links.
26+
**Upstream:** 11 fix PRs filed against `llvm/llvm-project` so far — **10 merged**
27+
(#001, #002, #003/#020, #007, #014, #022, #028, #029, #033, #058) and **1 open**
28+
(#023). See [Upstream PRs](#upstream-prs) for links.
2929

3030
The adversarial pass earned its keep: it correctly **rejected** several
3131
plausible-looking candidates (PTX `min`/`max` *do* order signed zeros per ISA
@@ -40,7 +40,7 @@ are listed at the bottom.
4040
- **#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)*
4141
- **#031** — a `volatile` load gets tagged `!invariant.load` and lowered to `ld.global.nc`, dropping volatile.
4242
- **#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)*
4444

4545
### Upstream PRs
4646

@@ -56,10 +56,10 @@ Fixes filed against `llvm/llvm-project` for bugs above. *Merged* has landed on
5656
| 014 | [#201184](https://github.com/llvm/llvm-project/pull/201184) — Print the full value of e.g. an i65 global | merged |
5757
| 022 | [#200735](https://github.com/llvm/llvm-project/pull/200735) — Remove nvvm scoped atomic intrinsics; use atomicrmw/cmpxchg | merged |
5858
| 023 | [#201217](https://github.com/llvm/llvm-project/pull/201217) — Properly emit narrow ptrtoint in aggregate initializers | open |
59-
| 028 | [#201245](https://github.com/llvm/llvm-project/pull/201245) — NVVMIntrRange: handle maxntid > UINT32_MAX | open |
60-
| 029 | [#201220](https://github.com/llvm/llvm-project/pull/201220) — Handle symbol-relative integer initializers in aggregates | open |
61-
| 033 | [#200732](https://github.com/llvm/llvm-project/pull/200732) — Respect FTZ flag when lowering atomicrmw fadd | open |
62-
| 058 | [#201246](https://github.com/llvm/llvm-project/pull/201246) — Pad non-power-of-2 vectors in structs properly | open |
59+
| 028 | [#201245](https://github.com/llvm/llvm-project/pull/201245) — NVVMIntrRange: handle maxntid > UINT32_MAX | merged |
60+
| 029 | [#201220](https://github.com/llvm/llvm-project/pull/201220) — Handle symbol-relative integer initializers in aggregates (+ follow-up [#201473](https://github.com/llvm/llvm-project/pull/201473) removing `sub`) | merged |
61+
| 033 | [#200732](https://github.com/llvm/llvm-project/pull/200732) — Respect FTZ flag when lowering atomicrmw fadd | merged |
62+
| 058 | [#201246](https://github.com/llvm/llvm-project/pull/201246) — Pad non-power-of-2 vectors in structs properly | merged |
6363

6464
## Tools
6565
- LLVM source: `/Users/justinlebar/code/vm-shared/llvm` (= `~/code/llvm`), HEAD `6d2a90bd8bf3` at session start.

‎x86/README.md‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ Most reproducible bugs fall in: metadata loss (`!nontemporal`, `!invariant.load`
6060
| 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) |
6161
| 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 |
6262
| 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 |
63-
| 014 | [014-resetfpenv-mmo-flagged-as-store-on-load](bugs/014-resetfpenv-mmo-flagged-as-store-on-load/) - constant-pool FLDENVm load tagged `MOStore` (sister GET_FPENV_MEM correctly uses `MOLoad`) | |
63+
| 014 | [014-resetfpenv-mmo-flagged-as-store-on-load](bugs/014-resetfpenv-mmo-flagged-as-store-on-load/) - constant-pool FLDENVm load tagged `MOStore` (sister GET_FPENV_MEM correctly uses `MOLoad`) | PR [#201832](https://github.com/llvm/llvm-project/pull/201832) (open, by mbhade-amd) |
6464
| 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 |
6565
| 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 | |
6666
| 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`
7070
| 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 | |
7171
| 022 | [022-fpext-of-sitofp-drops-fmf](bugs/022-fpext-of-sitofp-drops-fmf/) - `fpext(sitofp x)` sunk via `CastInst::Create` drops FMF (sitofp/uitofp aren't FPMathOperators) | |
7272
| 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 | |
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 | PR [#201826](https://github.com/llvm/llvm-project/pull/201826) merged (by mbhade-amd) |
7474
| 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 | |
7575
| 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 | |
7676
| 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`
180180
| 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 | |
181181
| 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) |
182182
| 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. |
183-
| 147 | [147-jt-duplicateCondBranch-noalias-scopes-not-cloned](bugs/147-jt-duplicateCondBranch-noalias-scopes-not-cloned/) - inline clone loop omits `cloneNoAliasScopes`/`adaptNoAliasScopes` (present in cloneInstructions); duplicated load/store share original scope IDs | PR [#200550](https://github.com/llvm/llvm-project/pull/200550) (open) |
183+
| 147 | [147-jt-duplicateCondBranch-noalias-scopes-not-cloned](bugs/147-jt-duplicateCondBranch-noalias-scopes-not-cloned/) - inline clone loop omits `cloneNoAliasScopes`/`adaptNoAliasScopes` (present in cloneInstructions); duplicated load/store share original scope IDs | PR [#200550](https://github.com/llvm/llvm-project/pull/200550) merged |
184184
| 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 |
185185
| 149 | [149-dse-partial-merge-drops-nontemporal](bugs/149-dse-partial-merge-drops-nontemporal/) - drops `!nontemporal` metadata when merging (sibling of #108 atomic gap) | |
186186
| 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`
195195
| 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) | |
196196
| 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 | |
197197
| 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`) |
199199
| 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 | |
200200
| 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) |
201201
| 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`
218218
| 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 |
219219
| 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 |
220220
| 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) |
222222
| 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 |
223223
| 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) |
224224
| 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`
266266
| 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` | |
267267
| 246 | [246-constantfolding-ldexp-i64-exponent-narrowed-to-int](bugs/246-constantfolding-ldexp-i64-exponent-narrowed-to-int/) - `ldexp(1.0, i64 4294967330)` folded to `2^34` (i64→int narrowing wraps); expected `+inf` per LangRef | PR [#199309](https://github.com/llvm/llvm-project/pull/199309) merged |
268268
| 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 |
270270
| 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)) |
271271
| 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 |
272272
| 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

Comments
 (0)