llir / llvm

Library for interacting with LLVM IR in pure Go.
https://llir.github.io/document/
BSD Zero Clause License
1.18k stars 78 forks source link

ast parsed error #204

Closed pupiles closed 3 years ago

pupiles commented 3 years ago
define internal align 8 dereferenceable_or_null(16) i64* @"_ZNIterator$GT$4next17ha1b316511c33ec8fE"(i64* dereferenceable(16) %self) unnamed_addr #0 !dbg !0{
start:
  ret void
}

The codes above are ast parsed error when used asm.ParseFile because align 8 seems not supported when placed as the decorator of a function. Could you pass me some hints on that, really appreciate that. heck.ll.zip

mewmew commented 3 years ago

Hi @pupiles,

This is probably related to #40? See https://github.com/llir/llvm/issues/198#issuecomment-884925570 for an explanation of what is most likely causing the issue.

I wish we may find a good solution for this, but at least for now, I have not yet found one. If you know any way to solve #40, please let us know :D

Happy wishes from Sweden.

Cheers, Robin

pupiles commented 3 years ago

Hi @mewmew,

Thanks for your reply.

I wonder if there is a temporary solution to this issue,for the scenario where parsing the correct align position is not important.

Best Wishes, Pupiles

mewmew commented 3 years ago

Hi @mewmew,

Thanks for your reply.

Hi @pupiles, you're most welcome :)

I wonder if there is a temporary solution to this issue,for the scenario where parsing the correct align position is not important.

Here is possible and very crude work-around. It strips away align NN from function declarations and definitions, and call and invoke instructions.

go install -v github.com/mewkiz/cmd/sar@master

strip_ll.sh:

FILE=$1

sar -i 'call align [0-9]+ ' 'call ' $FILE
sar -i 'define align [0-9]+ ' 'define ' $FILE
sar -i 'declare align [0-9]+ ' 'declare ' $FILE
sar -i 'invoke align [0-9]+ ' 'invoke ' $FILE

Running strip_ll.sh heck.ll rewrites the heck.ll file so that it can be parsed with llir/llvm.

Parsing heck.ll (with align stripped) using l-tm of llir/llvm.

$ l-tm -v heck.ll
=== [ heck.ll ] =======================

total time for file "heck.ll": 165.866118ms
source_filename = "heck.e5goil5t-cgu.0"
target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.7.0"

%"[closure@/Users/admin/.cargo/registry/src/rsproxy.cn-8f6827c7555bfaf8/heck-0.3.3/src/camel.rs:23:37: 23:43]" = type {}
...

Cheers, Robin

mewmew commented 3 years ago

I'll close this as a duplicate of #40 for now. I do hope we find a good solution for #40 soon, as it comes up every now and then.

Happy coding! /robin