> I believe you are describing VLIW architecture here? Is that correct?
Yes. The Itanium was a specific form of VLIW called EPIC, for Explicitly Parallel Instruction Computing:
https://en.wikipedia.org/wiki/Explicitly_parallel_instructio...
Wikipedia lists these modifications EPIC makes to the basic VLIW concept:
> Each group of multiple software instructions is called a bundle. Each of the bundles has a stop bit indicating if this set of operations is depended upon by the subsequent bundle. With this capability, future implementations can be built to issue multiple bundles in parallel. The dependency information is calculated by the compiler, so the hardware does not have to perform operand dependency checking.
> A software prefetch instruction is used as a type of data prefetch. This prefetch increases the chances for a cache hit for loads, and can indicate the degree of temporal locality needed in various levels of the cache.
> A speculative load instruction is used to speculatively load data before it is known whether it will be used (bypassing control dependencies), or whether it will be modified before it is used (bypassing data dependencies).
> A check load instruction aids speculative loads by checking whether a speculative load was dependent on a later store, and thus must be reloaded.
also:
> How exactly does a VLIW architecture remove the need for reordering? Is it just that any instructions in a word mean automatically mean there's no dependencies in that long instruction? Was that the original intention of VLIW?
That's exactly right: By putting the opcodes in the same word (and/or, in the case of EPIC, in a word subsequent to a previous word without the stop bit set) the entity generating the instruction stream is guaranteeing to the hardware that those opcodes can run in parallel with no problems.
> I'm curious did Itanium fail because the model of pushing the complexity onto the software and a human failed or did it fail because of lack backward compatibility for a world that was largely x86 at that point?
As others said, it was a mix, and, interestingly, the first few Itanium processor generations had a hardware x86 unit to provide compatibility, albeit one that executed x86 code at the speed of 100 MHz Pentium on a 667 MHz Itanium part, and Intel later commissioned software translation, which was actually faster:
https://www.informationweek.com/it-life/intel-sees-a-32-bit-...
Here's a very informative (but long) bunch of slides about Itanium in theory and practice:
https://users.nik.uni-obuda.hu/sima/letoltes/Processor_famil...