llvm-ld -disable-opt behavior.

Consider the example command line below

$ llvm-ld -disable-opt hello.bc -l std -o hello.out

Why does -disable-opt links in all the bitcode from the libstd.so into
hello.out?

- Sanjiv

... because it just disables optimization passed. It does not disable linking.
?

> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?

... because it just disables optimization passed. It does not disable linking.
?
-
Devang

It should link in whatever is needed and not the whole lib.

- Sanjiv

> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?

... because it just disables optimization passed. It does not disable linking.
?
-
Devang
______

I think I did not explain the question really well.

-disable-opt links the whole lib into the final program while not using
-disable-opt links in only the required symbols. Why ?

- Sanjiv

> Consider the example command line below
>
> $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>
> Why does -disable-opt links in all the bitcode from the libstd.so into
> hello.out?

... because it just disables optimization passed. It does not disable linking.
?
-
Devang
______

I think I did not explain the question really well.

-disable-opt links the whole lib into the final program while not using
-disable-opt links in only the required symbols. Why ?

I think you are confusing the order. Probably what is happening is
whole lib is getting linked in, then optimization is throwing away a
bunch of stuff.

Linking works on modules at a time, so if hello.bc uses some symbol X,
it will pull in the entire module inside the library which contains a
definition of X.

- Daniel

Hello Sanjiv,

Wouldn't that be considered a dead-code elimination optimization? If so, then that feature would be disabled by the -disable-opt option.

--Sam

>> > Consider the example command line below
>> >
>> > $ llvm-ld -disable-opt hello.bc -l std -o hello.out
>> >
>> > Why does -disable-opt links in all the bitcode from the libstd.so into
>> > hello.out?
>>
>> ... because it just disables optimization passed. It does not disable linking.
>> ?
>> -
>> Devang
>> ______
> I think I did not explain the question really well.
>
> -disable-opt links the whole lib into the final program while not using
> -disable-opt links in only the required symbols. Why ?

I think you are confusing the order. Probably what is happening is
whole lib is getting linked in, then optimization is throwing away a
bunch of stuff.

Linking works on modules at a time, so if hello.bc uses some symbol X,
it will pull in the entire module inside the library which contains a
definition of X.

- Daniel

Ok. so when you
$ llvm-ld -link-as-library a.bc b.bc c.bc -o stdlib.so

The generated file stdlib.so becomes a single module. Right ?

- Sanjiv