[llvm-dev] IR with no optimization

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Tue Feb 9 08:20:06 PST 2016


If you're trying to do source level analysis (questions like "is there an
assignment of a variable of this name") it may be better to work up in
Clang than down in LLVM - LLVM has no guarantees about names (indeed names
on instructions are a compiler debugging feature, not a feature that should
be used by any optimization, analysis, etc) or preservation of things like
loads/stores.

You could dump the unoptimized IR, if you're just trying to do some static
analysis rather than an optimization - doesn't matter to you, probably, if
it doesn't produce a valid kernel in the end.

On Tue, Feb 9, 2016 at 8:09 AM, Kai Wang via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi all,
>
> I'm compiling linux kernel with clang. I want to generate IR with no
> optimization. However, kernel can only be compile with -O2 instead of -O0.
>
> Here is the source code snippet:
>
> struct zone *next_zone(struct zone *zone)
>
>  {   pg_data_t **pgdat* = zone->zone_pgdat;
>
> }
>
> I want to know there is an assignment from "zone" to "pgdat". I'm trying
> to iterate "store" instructions in IR.
>
> When I compile with -O2, I have the following IR:
>
> define %struct.zone* @next_zone(%struct.zone* readonly %zone) #0 !dbg !214
> {
>
>         call void @llvm.dbg.value(metadata %struct.zone* %zone, i64 0,
> metadata !218, metadata !305), !dbg !326
>
>         %1 = getelementptr inbounds %struct.zone, %struct.zone* %zone,
> i64 0, i32 5, !dbg !327
>
>         %2 = load %struct.pglist_data*, %struct.pglist_data** %1, align 8,
> !dbg !327
>
>         call void @llvm.dbg.value(metadata %struct.pglist_data* %2, i64 0,
> metadata !219, metadata !305), !dbg !328 }
>
> *Store instruction has been optimized, and no variable name in IR.*
>
> When I comile with -O0, I have the following IR:
>
> define %struct.zone* @next_zone(%struct.zone* %zone) #0 !dbg !211 {
>
>          %1 = alloca %struct.zone*, align 8
>
>          %pgdat = alloca %struct.pglist_data*, align 8
>
>          store %struct.zone* %zone, %struct.zone** %1, align 8
>
>          call void @llvm.dbg.declare(metadata %struct.zone** %1, metadata
> !297, metadata !265), !dbg !298
>
>          call void @llvm.dbg.declare(metadata %struct.pglist_data**
> %pgdat, metadata !299, metadata !265), !dbg !302
>
>          %2 = load %struct.zone*, %struct.zone** %1, align 8, !dbg !303
>
>          %3 = getelementptr inbounds %struct.zone, %struct.zone* %2, i32 0,
> i32 5, !dbg !304
>
>          %4 = load %struct.pglist_data*, %struct.pglist_data** %3, align 8,
> !dbg !304
>
>          *store %struct.pglist_data* %4, %struct.pglist_data** %**pgdat,
> align 8, !dbg !302*
> There is store instruction. I know there is an assignment. From this
> store, I backward traverse until I find variable.
> For example, I go through %4->%3->%2->%1->struct.zone. I have variable
> name pgdat in IR as well.
>
> Since kernel can only be compiled with -O2, IR has been optimized a lot.
> Is there any way I can know the variable name and there is an assignment
> from "zone" to "pgdat"?
>
> Thank you!
> --
> Regards,
> Kai
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20160209/7573e3f8/attachment-0001.html>


More information about the llvm-dev mailing list