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.
[Constant Hoisting][ARM64] Enable constant hoisting for ARM64.
This implements the target-hooks for ARM64 to enable constant hoisting. This fixes <rdar://problem/14774662> and <rdar://problem/16381500>. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@205791 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
Showing
4 changed files
with
180 additions
and
13 deletions.
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
; RUN: llc -mtriple=arm64-darwin-unknown < %s | FileCheck %s | ||
|
||
%T = type { i32, i32, i32, i32 } | ||
|
||
; Test if the constant base address gets only materialized once. | ||
define i32 @test1() nounwind { | ||
; CHECK-LABEL: test1 | ||
; CHECK: movz x8, #1039, lsl #16 | ||
; CHECK-NEXT: movk x8, #49152 | ||
; CHECK-NEXT: ldp w9, w10, [x8, #4] | ||
; CHECK: ldr w8, [x8, #12] | ||
%at = inttoptr i64 68141056 to %T* | ||
%o1 = getelementptr %T* %at, i32 0, i32 1 | ||
%t1 = load i32* %o1 | ||
%o2 = getelementptr %T* %at, i32 0, i32 2 | ||
%t2 = load i32* %o2 | ||
%a1 = add i32 %t1, %t2 | ||
%o3 = getelementptr %T* %at, i32 0, i32 3 | ||
%t3 = load i32* %o3 | ||
%a2 = add i32 %a1, %t3 | ||
ret i32 %a2 | ||
} | ||
|
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,23 @@ | ||
; RUN: opt -mtriple=arm64-darwin-unknown -S -consthoist < %s | FileCheck %s | ||
|
||
%T = type { i32, i32, i32, i32 } | ||
|
||
define i32 @test1() nounwind { | ||
; CHECK-LABEL: test1 | ||
; CHECK: %const = bitcast i64 68141056 to i64 | ||
; CHECK: %1 = inttoptr i64 %const to %T* | ||
; CHECK: %o1 = getelementptr %T* %1, i32 0, i32 1 | ||
; CHECK: %o2 = getelementptr %T* %1, i32 0, i32 2 | ||
; CHECK: %o3 = getelementptr %T* %1, i32 0, i32 3 | ||
%at = inttoptr i64 68141056 to %T* | ||
%o1 = getelementptr %T* %at, i32 0, i32 1 | ||
%t1 = load i32* %o1 | ||
%o2 = getelementptr %T* %at, i32 0, i32 2 | ||
%t2 = load i32* %o2 | ||
%a1 = add i32 %t1, %t2 | ||
%o3 = getelementptr %T* %at, i32 0, i32 3 | ||
%t3 = load i32* %o3 | ||
%a2 = add i32 %a1, %t3 | ||
ret i32 %a2 | ||
} | ||
|
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,3 @@ | ||
targets = set(config.root.targets_to_build.split()) | ||
if not 'ARM64' in targets: | ||
config.unsupported = True |