[llvm-dev] Swift to IR, generates wrong IR

16 views
Skip to first unread message

Rinaldini Julien via llvm-dev

unread,
Oct 5, 2015, 5:26:06 AM10/5/15
to llvm...@lists.llvm.org
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...@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Rinaldini Julien via llvm-dev

unread,
Oct 5, 2015, 5:49:46 AM10/5/15
to llvm...@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
^

Björn Steinbrink

unread,
Oct 5, 2015, 6:27:35 AM10/5/15
to Rinaldini Julien, llvm...@lists.llvm.org
Hi,

2015-10-05 11:49 GMT+02:00 Rinaldini Julien via llvm-dev
<llvm...@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

Rinaldini Julien via llvm-dev

unread,
Oct 5, 2015, 6:38:47 AM10/5/15
to llvm...@lists.llvm.org
Thx a lot, worked with '-emit-bc’

Cheers,

Tim Northover via llvm-dev

unread,
Oct 5, 2015, 10:02:34 AM10/5/15
to Rinaldini Julien, llvm...@lists.llvm.org
On 5 October 2015 at 03:38, Rinaldini Julien via llvm-dev

<llvm...@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.

Reply all
Reply to author
Forward
0 new messages