forked from llvm-mirror/llvm
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add TargetLoweringInfo hook for explicitly setting the ABI calling co…
…nvention endianess Summary: The endianess used in the calling convention does not always match the endianess of the target on all architectures, namely AVR. When an argument is too large to be legalised by the architecture and is split for the ABI, a new hook TargetLoweringInfo::shouldSplitFunctionArgumentsAsLittleEndian is queried to find the endianess that function arguments must be laid out in. This approach was recommended by Eli Friedman. Originally reported in avr-rust/rust-legacy-fork#129. Patch by Carl Peto. Reviewers: bogner, t.p.northover, RKSimon, niravd Subscribers: JDevlieghere, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D62003
- Loading branch information
1 parent
64b3d65
commit 09f5c29
Showing
4 changed files
with
64 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
; RUN: llc -O1 < %s -march=avr | FileCheck %s | ||
|
||
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
target triple = "x86_64-apple-macosx10.9" | ||
|
||
%Vs6UInt16 = type <{ i16 }> | ||
%Sb = type <{ i1 }> | ||
|
||
define hidden void @setServoAngle(i16) { | ||
; CHECK-LABEL: entry | ||
entry: | ||
%adjustedAngle = alloca %Vs6UInt16, align 2 | ||
%1 = bitcast %Vs6UInt16* %adjustedAngle to i8* | ||
%adjustedAngle._value = getelementptr inbounds %Vs6UInt16, %Vs6UInt16* %adjustedAngle, i32 0, i32 0 | ||
store i16 %0, i16* %adjustedAngle._value, align 2 | ||
|
||
;print(unsignedInt: adjustedAngle &* UInt16(11)) | ||
; breaks here | ||
%adjustedAngle._value2 = getelementptr inbounds %Vs6UInt16, %Vs6UInt16* %adjustedAngle, i32 0, i32 0 | ||
%2 = load i16, i16* %adjustedAngle._value2, align 2 | ||
|
||
; CHECK: mov r22, r24 | ||
; CHECK: mov r23, r25 | ||
|
||
; CHECK-DAG: ldi r20, 0 | ||
; CHECK-DAG: ldi r21, 0 | ||
; CHECK-DAG: ldi r18, 11 | ||
; CHECK-DAG: ldi r19, 0 | ||
|
||
; CHECK: mov r24, r20 | ||
; CHECK: mov r25, r21 | ||
; CHECK: call __mulsi3 | ||
%3 = call { i16, i1 } @llvm.umul.with.overflow.i16(i16 %2, i16 11) | ||
%4 = extractvalue { i16, i1 } %3, 0 | ||
%5 = extractvalue { i16, i1 } %3, 1 | ||
|
||
; above code looks fine, how is it lowered? | ||
%6 = call i1 @printDefaultParam() | ||
call void @print(i16 %4, i1 %6) | ||
|
||
; CHECK: ret | ||
ret void | ||
} | ||
|
||
declare void @print(i16, i1) | ||
declare i1 @printDefaultParam() | ||
|
||
; Function Attrs: nounwind readnone speculatable | ||
declare { i16, i1 } @llvm.umul.with.overflow.i16(i16, i16) |