Talk:LLVM

Page contents not supported in other languages.
From Wikipedia, the free encyclopedia

Title[edit]

Is there any way to capitalize the LVM in Llvm in the title?

Low level virtual machine -> Low Level Virtual Machine ?

I have moved the page from Low level virtual machine to Low Level Virtual Machine. -- Tobias Bergemann 08:06, 2005 Jan 9 (UTC)

Why reference to libJIT is deleted? Any marketing reason?[edit]

I noticed that reference to libJIT is always deleted. It has many of similar goals to LLVM. Why is it deleted?

See also "libJIT vs LLVM discussion" Rhys Weatherley (libJIT) and Chris Lattner (LLVM)

Apple?[edit]

Should this article discuss things Chris Lattner is doing with LLVM at Apple?

Frankie

Yes. Use of the project in a major software component deployed to large numbers of users like the MacOSX OpenGL implementation is clearly worth mentioning. JulesH 14:37, 10 September 2006 (UTC)[reply]

Type safety[edit]

I've removed the claim that a program with no "cast" instructions is type safe. Type safety requires more than just lack of type coercion (particularly, we must check that array bounds are not exceeded and that no pointers to an object are used after the end of that object's lifetime); also the point is academic anyway as it is nearly impossible to write a non-trivial program that doesn't use the 'cast' instruction. (Possible reference if we want to put something about type safety back in) JulesH 14:37, 10 September 2006 (UTC)[reply]

(And, yes, in case you're wondering, I am the Jules who posted the question that was a reply to). JulesH 14:38, 10 September 2006 (UTC)[reply]

You may be interested in the safecode project, which aims to add type safety to LLVM: safecode

Initial release date wrong[edit]

The shown initial release date seems wrong. This mail is the initial announcement and it dates to 2003. Maybe the idea was conceived in 2000 :-) The oldest news date back to 2002. 135.245.72.35 (talk) 18:55, 10 June 2008 (UTC)[reply]

(Much, much, later:) Yep. 2000 was when they started the project. I forget whether they released any pre-1.0 versions, but 1.0 was definitely released in October 2003, so I've updated the infobox to say 2003. Cheers, CWC 13:37, 19 April 2010 (UTC)[reply]

Dubious[edit]

Objective-C "was somewhat moribund" in gcc? If it was moribund, how come it is still alive in gcc? If it still is moribund, just remember that Wikipedia is not a crystal ball – it is not proper to make prophetic "predictions" about future in Wikipedia. What does the stmt "somewhat moribund" mean? That the compiler is a little dead/stagnant but it is not easy to realize it? If it is not easy to realize it, why does the subjective statement "moribund" apply? Rursus dixit. (mbork3!) 19:55, 25 January 2010 (UTC)[reply]

There has been no main-line development of Obj-C in over a decade. By most definitions that is "moribund". But since anyone could pick up active development at any time, saying it is completely moribund would be predicting the future. So, "somewhat moribund". If there is a better commonly used term for this, please, edit away.
But I'm not sure that's what you're asking. I don't understand the "easy to recognize" issue, nor the crystal ball comment. Can you clarify? Maury Markowitz (talk) 13:57, 18 April 2010 (UTC)[reply]
How has there been "no main-line development of Obj-C in over a decade" if the recent Objective C 2.0 has brought many new features to Objective-C, and still being more improved as we speak in redacted upcoming development ? Snails man ~~ —Preceding unsigned comment added by 203.117.169.162 (talk) 06:07, 23 December 2010 (UTC)[reply]
"Moribund" is equal to "dying" according to my dictionary. That means it will "die" if it is "moribund". Maybe it will, maybe it won't. I think the objective (if such exists) nonpredicting expression is "the development is currently stagnant", or some such. Rursus dixit. (mbork3!) 14:26, 18 April 2010 (UTC)[reply]
What do you think, will "is stagnant" be an acceptable replacement for "is somewhat moribund"? Rursus dixit. (mbork3!) 14:29, 18 April 2010 (UTC)[reply]
I changed to "stagnant" anyways. Maybe this is not such a big deal? There's always an option to revert my changes. Rursus dixit. (mbork3!) 17:44, 18 April 2010 (UTC)[reply]
That's a very good word, "stagnant". Thanks, Rursus. Cheers, CWC 11:13, 19 April 2010 (UTC)[reply]
I like it too. Sorry, would have gotten back to you earlier, but was out of town for a bit. Maury Markowitz (talk) 00:23, 22 April 2010 (UTC)[reply]

Backends[edit]

In addition to a frontends section, this article needs a backends section. One very interesting backend is the emscripten backend that compiles LLVM IR bitcode to Javascript: http://code.google.com/p/emscripten/ —Preceding unsigned comment added by 66.30.115.7 (talk) 06:11, 16 February 2011 (UTC)[reply]

I think Emscripten and a few other language backends (eg LLVM "C Backend", WebAssembly (I think)) should be mentioned to show that LLVM can be used as a Source-to-source compiler. Damian Pound (talk) 20:30, 25 May 2016 (UTC)[reply]

KLEE?[edit]

The German LLVM article has a section on KLEE: http://de.wikipedia.org/wiki/Low_Level_Virtual_Machine#KLEE. Should the English version? The English entry for KLEE is for a radio station, without even a disambiguator.

FlashSheridan (talk) 14:54, 2 August 2011 (UTC)[reply]

Rename page[edit]

LLVM is no longer an initialism (not acronym) of Low Level Virtual Machine. If you check the official website at llvm.org, there are no references to "Low Level Virtual Machine". On the LLVM mailing list, it was confirmed by an LLVM developer that the "Low Level Virtual Machine" name is gone ([1] and [2]). So the page should be renamed to LLVM (removing the redirect that is currently there), and Low Level Virtual Machine should only be a redirect to LLVM. DirtY iCE (talk) 22:54, 22 December 2011 (UTC)[reply]

Hi! I have to confirm a few things just to make sure. The lists.cs.uiuc.ed reference has someone saying the name was changed, but does not indicate who that person is. You know how we are at Wikipedia -- everything needs to be verifiable.
I read a bunch of replies on that site, and one of them says Wikipedia still has the old name, and another says "Who you gonna believe Jianzhou, Wikipedia or the original author?" but once again I don't know who that person is who wrote that.
Also the URL "lists.cs.uiuc.edu/pipermail/llvmdev/" sure sounds like an official developers mailing list, but of course that needs to be verified.
OK, lets look at your other URL: http://llvm.org/ and see if we can fill in some of the gaps:
The present page confirms that is the official LLVM website. Let's see... "useful Links" has a link to "LLVM-dev"... Aha! http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev is the LLVM Developers Mailing List and http://lists.cs.uiuc.edu/pipermail/llvmdev/ is the archive of same. That confirms that.
Going back to the main page, the LLVM developers are listed at http://llvm.org/developers.cgi Checking... Bingo! Chris Lattner -- the author of the email -- is listed.
So we now have confirmed from the developers that "LLVM" is now the name, not an acronym. And, because I documented each step above, any other Wikipedia editor now or in the future can also confirm this.
Now for the nuts and bolts of that redirect. I have never done a swap like this, so off to the Wikipedia help system for me. ... OK, https://en.wikipedia.org/wiki/Help:Moving_a_page seems to cover it, especially the section titled "Moves where the target name has an existing page" (reads the docs) I am not sure if the redirect makes this a special case, so I am going to ask for help at https://en.wikipedia.org/wiki/Wikipedia:Requested_moves
...
Done. The request is here: https://en.wikipedia.org/wiki/Wikipedia:Requested_moves#Technical_requests
So, if I did it right, the redirects will be switched, or we will be told why not. --Guy Macon (talk) 03:53, 23 December 2011 (UTC)[reply]
The admin who is working through the backlog has competed the move request above ours, so we are next in line. --Guy Macon (talk) 14:51, 23 December 2011 (UTC)[reply]

assembly code vs object code[edit]

Is the output converted into machine-dependent assembly code for a target platform or machine-dependent object code for a target platform DGerman (talk) 22:50, 31 December 2012 (UTC)[reply]

Yes. :-) Guy Harris (talk) 20:34, 30 March 2013 (UTC)[reply]

ACM Software System Award[edit]

This article should probably mention that LLVM is the recipient of the 2012 ACM Software System Award. Tweisbach (talk) 04:30, 26 April 2013 (UTC)[reply]

Good point. And now it does. Cheers, CWC 05:48, 27 April 2013 (UTC)[reply]

Variable or constant?[edit]

In the paragraph entitled "Description" you write "each variable (called a typed register) is assigned once and is frozen." Do you mean that the type of the variable is frozen or its value?

If the value is frozen, then this is not a "variable" but a "constant" and this is a noticeable difference with imperative programming languages and should be explicited. This would be a similarity with functional languages, in which the only variables are the arguments of functions.

Didier-Kryn (talk) 14:46, 24 January 2014 (UTC)[reply]

The value is frozen.
This isn't a programming language - imperative, functional, or otherwise - it's an intermediate representation generated by compiler front-ends (such as clang) and turned into machine code by a code generator (such as the LLVM backends); for LLVM, other tools also generate its intermediate representation
The explanation is on the static single assignment form page, which is linked to shortly before the clause you quote. Guy Harris (talk) 20:54, 24 January 2014 (UTC)[reply]

Too abstract[edit]

This article is way too technical. At the very least the opening paragraph should have a simple description of what the software actually does or allows people to accomplish. It's just a mess of technical terms right now. Awarenode (talk) 20:12, 5 June 2015 (UTC)[reply]

Well, it is a very esoteric subject and if you don't understand it, you really have no need for the information in the first place. The opening paragraph is quite descriptive for those who have the prerequisite background. You really need to be an implementer of computer programming languages for LLVM to be of any use to you. It's not really possible to get less technical than the opening sentence: "The LLVM compiler infrastructure project (formerly Low Level Virtual Machine) is a compiler infrastructure designed to be a set of reusable libraries with well-defined interfaces." LLVM is compiler infrastructure. It's a set of libraries with well-defined interfaces. Either you need it (to construct compilers for programming languages) or you don't. Dlw20070716 (talk) 04:07, 18 July 2015 (UTC)[reply]
"The LLVM compiler infrastructure project is a compiler infrastructure ..." is a great deal less awesome than you suggest. From a strict perspective, it's not even grammatically viable, first of all failing to distinguish the project from its deliverables, and secondly, allowing "infrastructure" to very nearly function as a free noun (supply your own pre-understood meaning here).
It wants to go in something like this direction:
The LLVM compiler infrastructure project is a software development effort that provides a set of tools (collectively known as "LLVM") to compiler writers; in the common use, these tools supply large, pre-built pieces of a compiler's code generation infrastructure. Code generation is a complex and highly technical subject, involving a great deal of theory normally taught in an undergraduate computer science degree, and further riddled in practice with multiple dimensions of efficiency (trade-offs involving time, space, and power usage) and behaviour (trade-offs involving bandwidth, throughput, latency, and predictability) interacting with arcane details of target platform hardware, which is also typically highly diverse with many derivations and variants. Few compiler projects have the human resources available to take on this much theoretical and practical complexity without the use of LLVM or something like it. This portion of a compiler is normally regarded as infrastructure because it has only tenuous connections with the semantics of the programming language being implemented, most compiler writers preferring to focus their creative energy on language semantics rather than machine behaviour.
Can somebody take this and pass it through an OR removal filter? The article would surely benefit. — MaxEnt 20:36, 21 March 2016 (UTC)[reply]

Supported instruction sets / architectures[edit]

This article needs a section like GNU_Compiler_Collection#Architectures.

etc. User:ScotXWt@lk 19:41, 15 January 2016 (UTC)[reply]

I.e., turn LLVM#Back ends: instruction set and microarchitecture support into a multi-column list like the GCC section in question? Guy Harris (talk) 19:49, 16 January 2016 (UTC)[reply]
YES. But with references. User:ScotXWt@lk 10:03, 19 April 2016 (UTC)[reply]

Functional programmer speaking through his hat?[edit]

From the article:

LLVM supports a language-independent instruction set and type system. Each instruction is in static single assignment form (SSA), meaning that each variable (called a typed register) is assigned once and is frozen.

In a recursive, functional programming language, this might actually be true (Erlang BEAM SSA is described exactly this way) but LLVM supports graphs with back-links that actually loop.

From Static Single Assignment Book (June 2015 copy, apparently in beta):

A program is defined to be in SSA form if each variable is a target of exactly one assignment statement in the program text.

Much better! That's not actually insane. Or am I missing something obvious here? — MaxEnt 20:00, 21 March 2016 (UTC)[reply]

The "Hello World" snippet possibly does not assemble[edit]

I am no expert on LLVM (yet), but the snippet appears to use an outdated syntax, in particular `getelementptr` no longer (llvm 3.8+) accepts the `getelementptr [14 x i8]* @str...` form -- language reference page at http://llvm.org/docs/LangRef.html#metadata says:

   <result> = getelementptr <ty>, <ty>* <ptrval>{, <ty> <idx>}*
   <result> = getelementptr inbounds <ty>, <ty>* <ptrval>{, <ty> <idx>}*
   <result> = getelementptr <ty>, <ptr vector> <ptrval>, <vector index type> <idx>

Am I onto anything here? :) — Preceding unsigned comment added by Transientdifficulties (talkcontribs) 20:19, 16 August 2016 (UTC)[reply]

Snippet has been fixed 75.148.200.130 (talk) 18:29, 16 August 2017 (UTC)[reply]

External links modified[edit]

Hello fellow Wikipedians,

I have just modified 2 external links on LLVM. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.

checkY An editor has reviewed this edit and fixed any errors that were found.

  • If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
  • If you found an error with any archives or the URLs themselves, you can fix them with this tool.

Cheers.—InternetArchiveBot (Report bug) 20:15, 9 May 2017 (UTC)[reply]

External links modified[edit]

Hello fellow Wikipedians,

I have just modified one external link on LLVM. Please take a moment to review my edit. If you have any questions, or need the bot to ignore the links, or the page altogether, please visit this simple FaQ for additional information. I made the following changes:

When you have finished reviewing my changes, you may follow the instructions on the template below to fix any issues with the URLs.

checkY An editor has reviewed this edit and fixed any errors that were found.

  • If you have discovered URLs which were erroneously considered dead by the bot, you can report them with this tool.
  • If you found an error with any archives or the URLs themselves, you can fix them with this tool.

Cheers.—InternetArchiveBot (Report bug) 13:41, 14 December 2017 (UTC)[reply]

There's a better way to find the relevant information; I replaced the URL. Guy Harris (talk) 19:43, 14 December 2017 (UTC)[reply]

Initialism[edit]

LLVM may no longer be considered a proper "i itialism", as a newbe to the term my first question was what the letters me. An encyclopedia is not (solely) for experts, isn't it? It is rather for unknowing people looking for kniwledge. So my suggestion is to put the explanation of the acronym LLVM upfront, imnediately followed by the comment that present-day LLVM encompasses (much?) more than what the four letters mean. Rbakels (talk) 20:32, 28 December 2017 (UTC) Rbakels (talk) 20:32, 28 December 2017 (UTC)[reply]

The article used to say

The LLVM compiler infrastructure project (formerly Low Level Virtual Machine) is a "collection of modular and reusable compiler and toolchain technologies" used to develop compiler front ends and back ends.

but that was removed in this edit, with the comment "Removes old title from begining because it confuses new people without context and the project doesn't want to be called it".
So we appear to have some newbies confused by the name "LLVM" being explained up front and other newbies disappointed that it wasn't explained. :-) Perhaps it could be explained a bit later, and give more detail about why the original meaning was dropped, so as not to confuse the first set of first-timers but still provide the information that other first-timers want. Guy Harris (talk) 21:04, 28 December 2017 (UTC)[reply]
Could we solve the problem by moving the fourth paragraph (with the explanation of the letters) to become the second paragraph, immediately after the statement of what LLVM means now? Dbfirs 17:00, 3 January 2018 (UTC)[reply]

History[edit]

The present article's section LLVM § History contains just one paragraph, identical in every respect to the third-last paragraph of the article's lead section. Further, the remaining two paras of the lead also give a level of historical detail not usually seen in the lead.

I suggest that somebody – not me, I know too little of the subject!:

  1. move the last two paragraphs into the History section;
  2. write a précis of the revised History section's three paragraphs;
  3. finish the lead section with that précis.

yoyo (talk) 10:53, 4 March 2018 (UTC)[reply]

If someone wants to do what yoyo suggested above, that would probably be OK, but instead I have done what seemed to be easier for an article as short as this one: I merely inserted a "History" section heading above the three relevant paragraphs in the lead, removed the duplicate paragraph, and changed the old "History" section heading to "Version history". Biogeographist (talk) 18:24, 4 March 2018 (UTC)[reply]
Seems good to me – thanks! yoyo (talk) 14:29, 9 March 2018 (UTC)[reply]

Update the license in infobox[edit]

It seems license its license has been updated to Apache 2.0 license after this commit.——Wizard leave a comment 14:22, 1 February 2019 (UTC)[reply]

Intel SPMD Program Compiler[edit]

Is there a reason why the Intel SPMD Program Compiler (ispc) is not named in the article?
https://llvm.org/pubs/2012-05-13-InPar-ispc.html
https://ispc.github.io/
--Moritzgedig (talk) 08:34, 19 September 2019 (UTC)[reply]

LLVM 8.0.1 release date[edit]

The LLVM Releases download page states that 8.0.1 was released on "19 July 2019", but the LLVM 8.0.1 release was announced on August 1, 2019. The article currently cites the latter. Xanderlent (talk) 19:54, 19 September 2019 (UTC)[reply]

A Commons file used on this page or its Wikidata item has been nominated for deletion[edit]

The following Wikimedia Commons file used on this page or its Wikidata item has been nominated for deletion:

Participate in the deletion discussion at the nomination page. —Community Tech bot (talk) 21:53, 31 July 2021 (UTC)[reply]

What is "idle-time" optimization?[edit]

The lead section mentions "idle-time optimization" without a link to a definition, nor can I find an explanation of this elsewhere in the article. If this is a feature of LLVM it needs to be covered in the article and explained. Otherwise, possibly the term does not belong here and should just be removed from the lead section.

(In general I think the lead should not boast anything specific that is not backed up by information in the body text of the article.)

(Anders Hallström) 83.227.125.79 (talk) 12:19, 25 November 2022 (UTC)[reply]

LLILC seems to have been deprecated[edit]

According to the official project page[3]:

LLILC Is Now Archived

LLILC was an experimental project to build a .NET compatible JIT from LLVM. It is no longer under active development.

Should we remove C# from the list of languages that use LLVM? Yitzhaks (talk) 13:17, 13 February 2023 (UTC)[reply]