Björn Steinbrink via llvm-dev
2015-Oct-05 10:27 UTC
[llvm-dev] Swift to IR, generates wrong IR
Hi, 2015-10-05 11:49 GMT+02:00 Rinaldini Julien via llvm-dev <llvm-dev at lists.llvm.org>:> Sorry, the error is (the previous one was from Apple’s lli): > > Documents/strong.codes/code/build/obfuscator-llvm/bin/opt: test.ll:57:203: error: expected comma after getelementptr's type > @_METACLASS_DATA__TtC4test13TipCalculator = private constant { i32, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8* } { i32 129, i32 40, i32 40, i32 0, i8* null, i8* getelementptr inbounds ([25 x i8]* @7, i64 0, i64 0), i8* null, i8* null, i8* null, i8* null, i8* null }, section "__DATA, __objc_const", align 8The IR format is not stable and it seems like Swift is using an LLVM < 3.7, while your opt executable is from LLVM 3.7. The `getelementptr` instruction (besides others) now expects the pointer type to be given explicitly. I don't know Swift, but if you can get it to emit bitcode instead of IR, that should work AFAIK. Looking at the command line, you probably need -emit-bc. Björn> ^ > >> On 05 Oct 2015, at 11:25, Rinaldini Julien via llvm-dev <llvm-dev at lists.llvm.org> wrote: >> >> Hi, >> I have a simple swift code from which I generate IR code with ‘swiftc test.swift -emit-ir -o test.ll' >> When I try to run the .ll file or apply optimization with opt, I get errors like this one: >> >> lli: test.ll:548:110: error: expected instruction opcode >> %9 = cmpxchg i64* bitcast (%swift.type*** @field_type_vector_TipCalculator to i64*), i64 0, i64 %8 seq_cst seq_cst >> ^ >> I know swift is not part of the LLVM oss project, but is this problem coming from swift generating wrong IR code or is this a LLVM bug (or maybe I’m just doing something wrong)? >> >> Cheers, >> >> ps: this is the swift code I try running: >> >> class TipCalculator { >> >> // 2 >> let total: Double >> let taxPct: Double >> let subtotal: Double >> >> // 3 >> init(total: Double, taxPct: Double) {a >> self.total = total >> self.taxPct = taxPct >> subtotal = total / (taxPct + 1) >> } >> >> // 4 >> func calcTipWithTipPct(tipPct: Double) -> Double {a >> return subtotal * tipPct >> } >> >> // 5 >> func printPossibleTips() { >> print("15%: \(calcTipWithTipPct(0.15))") >> print("18%: \(calcTipWithTipPct(0.18))") >> print("20%: \(calcTipWithTipPct(0.20))") >> } >> >> } >> >> // 6 >> let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06) >> tipCalc.printPossibleTips() >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Rinaldini Julien via llvm-dev
2015-Oct-05 10:38 UTC
[llvm-dev] Swift to IR, generates wrong IR
Thx a lot, worked with '-emit-bc’ Cheers,> On 05 Oct 2015, at 12:27, Björn Steinbrink <bsteinbr at gmail.com> wrote: > > Hi, > > 2015-10-05 11:49 GMT+02:00 Rinaldini Julien via llvm-dev > <llvm-dev at lists.llvm.org>: >> Sorry, the error is (the previous one was from Apple’s lli): >> >> Documents/strong.codes/code/build/obfuscator-llvm/bin/opt: test.ll:57:203: error: expected comma after getelementptr's type >> @_METACLASS_DATA__TtC4test13TipCalculator = private constant { i32, i32, i32, i32, i8*, i8*, i8*, i8*, i8*, i8*, i8* } { i32 129, i32 40, i32 40, i32 0, i8* null, i8* getelementptr inbounds ([25 x i8]* @7, i64 0, i64 0), i8* null, i8* null, i8* null, i8* null, i8* null }, section "__DATA, __objc_const", align 8 > > The IR format is not stable and it seems like Swift is using an LLVM < > 3.7, while your opt executable is from LLVM 3.7. The `getelementptr` > instruction (besides others) now expects the pointer type to be given > explicitly. I don't know Swift, but if you can get it to emit bitcode > instead of IR, that should work AFAIK. Looking at the command line, > you probably need -emit-bc. > > Björn > >> ^ >> >>> On 05 Oct 2015, at 11:25, Rinaldini Julien via llvm-dev <llvm-dev at lists.llvm.org> wrote: >>> >>> Hi, >>> I have a simple swift code from which I generate IR code with ‘swiftc test.swift -emit-ir -o test.ll' >>> When I try to run the .ll file or apply optimization with opt, I get errors like this one: >>> >>> lli: test.ll:548:110: error: expected instruction opcode >>> %9 = cmpxchg i64* bitcast (%swift.type*** @field_type_vector_TipCalculator to i64*), i64 0, i64 %8 seq_cst seq_cst >>> ^ >>> I know swift is not part of the LLVM oss project, but is this problem coming from swift generating wrong IR code or is this a LLVM bug (or maybe I’m just doing something wrong)? >>> >>> Cheers, >>> >>> ps: this is the swift code I try running: >>> >>> class TipCalculator { >>> >>> // 2 >>> let total: Double >>> let taxPct: Double >>> let subtotal: Double >>> >>> // 3 >>> init(total: Double, taxPct: Double) {a >>> self.total = total >>> self.taxPct = taxPct >>> subtotal = total / (taxPct + 1) >>> } >>> >>> // 4 >>> func calcTipWithTipPct(tipPct: Double) -> Double {a >>> return subtotal * tipPct >>> } >>> >>> // 5 >>> func printPossibleTips() { >>> print("15%: \(calcTipWithTipPct(0.15))") >>> print("18%: \(calcTipWithTipPct(0.18))") >>> print("20%: \(calcTipWithTipPct(0.20))") >>> } >>> >>> } >>> >>> // 6 >>> let tipCalc = TipCalculator(total: 33.25, taxPct: 0.06) >>> tipCalc.printPossibleTips() >>> _______________________________________________ >>> LLVM Developers mailing list >>> llvm-dev at lists.llvm.org >>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >> >> _______________________________________________ >> LLVM Developers mailing list >> llvm-dev at lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
Tim Northover via llvm-dev
2015-Oct-05 14:02 UTC
[llvm-dev] Swift to IR, generates wrong IR
On 5 October 2015 at 03:38, Rinaldini Julien via llvm-dev <llvm-dev at lists.llvm.org> wrote:> Thx a lot, worked with '-emit-bc’Be careful if this is intended for production use, there's nothing forbidding Swift from making use of LLVM extensions (IR or backend) that don't exist in OSS (yet). The only compiler that can definitely consume IR produced by swiftc is swiftc. Cheers. Tim.