[llvm] d0f9553 - [PowerPC] Enable fast-isel on AIX 64 subtarget
Qiu Chaofan via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 2 20:35:42 PDT 2021
Author: Qiu Chaofan
Date: 2021-09-03T11:33:45+08:00
New Revision: d0f9553ef564de1ea0749ee3519d5505920dc29f
URL: https://github.com/llvm/llvm-project/commit/d0f9553ef564de1ea0749ee3519d5505920dc29f
DIFF: https://github.com/llvm/llvm-project/commit/d0f9553ef564de1ea0749ee3519d5505920dc29f.diff
LOG: [PowerPC] Enable fast-isel on AIX 64 subtarget
This patch basically enables fast-isel for AIX 64-bit subtarget
(previously enabled only for ELF 64). The initial motivation is to
introduce branch folding to AIX generated code for correct debug
behavior. I also saw some compiling time improvement in a few LLVM
test-suite benchmarks. (toast, dbms, cjpeg, burg, etc.)
Reviewed By: jsji
Differential Revision: https://reviews.llvm.org/D98844
Added:
llvm/test/CodeGen/PowerPC/fast-isel-branch.ll
Modified:
llvm/lib/Target/PowerPC/PPCFastISel.cpp
llvm/test/CodeGen/PowerPC/fast-isel-GEP-coalesce.ll
llvm/test/CodeGen/PowerPC/fast-isel-binary.ll
llvm/test/CodeGen/PowerPC/fast-isel-const.ll
llvm/test/CodeGen/PowerPC/fast-isel-crash.ll
llvm/test/CodeGen/PowerPC/fast-isel-ext.ll
llvm/test/CodeGen/PowerPC/fast-isel-fold.ll
llvm/test/CodeGen/PowerPC/fast-isel-i64offset.ll
llvm/test/CodeGen/PowerPC/fast-isel-indirectbr.ll
llvm/test/CodeGen/PowerPC/fast-isel-shifter.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/PowerPC/PPCFastISel.cpp b/llvm/lib/Target/PowerPC/PPCFastISel.cpp
index dfb2c1e5c0f58..9148a8cb15544 100644
--- a/llvm/lib/Target/PowerPC/PPCFastISel.cpp
+++ b/llvm/lib/Target/PowerPC/PPCFastISel.cpp
@@ -2467,9 +2467,9 @@ namespace llvm {
// Create the fast instruction selector for PowerPC64 ELF.
FastISel *PPC::createFastISel(FunctionLoweringInfo &FuncInfo,
const TargetLibraryInfo *LibInfo) {
- // Only available on 64-bit ELF for now.
+ // Only available on 64-bit for now.
const PPCSubtarget &Subtarget = FuncInfo.MF->getSubtarget<PPCSubtarget>();
- if (Subtarget.is64BitELFABI())
+ if (Subtarget.isPPC64())
return new PPCFastISel(FuncInfo, LibInfo);
return nullptr;
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-GEP-coalesce.ll b/llvm/test/CodeGen/PowerPC/fast-isel-GEP-coalesce.ll
index 3e0e5250d2fb8..3231579f346af 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-GEP-coalesce.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-GEP-coalesce.ll
@@ -1,4 +1,5 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
%struct.A = type { i32, [2 x [2 x i32]], i8, [3 x [3 x [3 x i32]]] }
%struct.B = type { i32, [2 x [2 x [2 x %struct.A]]] }
@@ -9,40 +10,40 @@
define i32* @t1() nounwind {
entry:
-; ELF64: t1
+; PPC64: t1
%addr = alloca i32*, align 4
store i32* getelementptr inbounds ([2 x [2 x [2 x [2 x [2 x i32]]]]], [2 x [2 x [2 x [2 x [2 x i32]]]]]* @arr, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1), i32** %addr, align 4
-; ELF64: addi {{[0-9]+}}, {{[0-9]+}}, 124
+; PPC64: addi {{[0-9]+}}, {{[0-9]+}}, 124
%0 = load i32*, i32** %addr, align 4
ret i32* %0
}
define i32* @t2() nounwind {
entry:
-; ELF64: t2
+; PPC64: t2
%addr = alloca i32*, align 4
store i32* getelementptr inbounds ([3 x [3 x %struct.A]], [3 x [3 x %struct.A]]* @A, i32 0, i32 2, i32 2, i32 3, i32 1, i32 2, i32 2), i32** %addr, align 4
-; ELF64: addi {{[0-9]+}}, {{[0-9]+}}, 1148
+; PPC64: addi {{[0-9]+}}, {{[0-9]+}}, 1148
%0 = load i32*, i32** %addr, align 4
ret i32* %0
}
define i32* @t3() nounwind {
entry:
-; ELF64: t3
+; PPC64: t3
%addr = alloca i32*, align 4
store i32* getelementptr inbounds ([3 x [3 x %struct.A]], [3 x [3 x %struct.A]]* @A, i32 0, i32 0, i32 1, i32 1, i32 0, i32 1), i32** %addr, align 4
-; ELF64: addi {{[0-9]+}}, {{[0-9]+}}, 140
+; PPC64: addi {{[0-9]+}}, {{[0-9]+}}, 140
%0 = load i32*, i32** %addr, align 4
ret i32* %0
}
define i32* @t4() nounwind {
entry:
-; ELF64: t4
+; PPC64: t4
%addr = alloca i32*, align 4
store i32* getelementptr inbounds ([2 x [2 x [2 x %struct.B]]], [2 x [2 x [2 x %struct.B]]]* @B, i32 0, i32 0, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 3, i32 1, i32 2, i32 1), i32** %addr, align 4
-; ELF64: addi {{[0-9]+}}, {{[0-9]+}}, 1284
+; PPC64: addi {{[0-9]+}}, {{[0-9]+}}, 1284
%0 = load i32*, i32** %addr, align 4
ret i32* %0
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-binary.ll b/llvm/test/CodeGen/PowerPC/fast-isel-binary.ll
index 486862418da45..2930e60a4fa50 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-binary.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-binary.ll
@@ -1,43 +1,44 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
; Test add with non-legal types
define void @add_i8(i8 %a, i8 %b) nounwind {
entry:
-; ELF64: add_i8
+; PPC64: add_i8
%a.addr = alloca i8, align 4
%0 = add i8 %a, %b
-; ELF64: add
+; PPC64: add
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @add_i8_imm(i8 %a) nounwind {
entry:
-; ELF64: add_i8_imm
+; PPC64: add_i8_imm
%a.addr = alloca i8, align 4
%0 = add i8 %a, 22;
-; ELF64: addi
+; PPC64: addi
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @add_i16(i16 %a, i16 %b) nounwind {
entry:
-; ELF64: add_i16
+; PPC64: add_i16
%a.addr = alloca i16, align 4
%0 = add i16 %a, %b
-; ELF64: add
+; PPC64: add
store i16 %0, i16* %a.addr, align 4
ret void
}
define void @add_i16_imm(i16 %a, i16 %b) nounwind {
entry:
-; ELF64: add_i16_imm
+; PPC64: add_i16_imm
%a.addr = alloca i16, align 4
%0 = add i16 %a, 243;
-; ELF64: addi
+; PPC64: addi
store i16 %0, i16* %a.addr, align 4
ret void
}
@@ -46,40 +47,40 @@ entry:
define void @or_i8(i8 %a, i8 %b) nounwind {
entry:
-; ELF64: or_i8
+; PPC64: or_i8
%a.addr = alloca i8, align 4
%0 = or i8 %a, %b
-; ELF64: or
+; PPC64: or
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @or_i8_imm(i8 %a) nounwind {
entry:
-; ELF64: or_i8_imm
+; PPC64: or_i8_imm
%a.addr = alloca i8, align 4
%0 = or i8 %a, -13;
-; ELF64: ori
+; PPC64: ori
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @or_i16(i16 %a, i16 %b) nounwind {
entry:
-; ELF64: or_i16
+; PPC64: or_i16
%a.addr = alloca i16, align 4
%0 = or i16 %a, %b
-; ELF64: or
+; PPC64: or
store i16 %0, i16* %a.addr, align 4
ret void
}
define void @or_i16_imm(i16 %a) nounwind {
entry:
-; ELF64: or_i16_imm
+; PPC64: or_i16_imm
%a.addr = alloca i16, align 4
%0 = or i16 %a, 273;
-; ELF64: ori
+; PPC64: ori
store i16 %0, i16* %a.addr, align 4
ret void
}
@@ -88,50 +89,50 @@ entry:
define void @sub_i8(i8 %a, i8 %b) nounwind {
entry:
-; ELF64: sub_i8
+; PPC64: sub_i8
%a.addr = alloca i8, align 4
%0 = sub i8 %a, %b
-; ELF64: sub
+; PPC64: sub
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @sub_i8_imm(i8 %a) nounwind {
entry:
-; ELF64: sub_i8_imm
+; PPC64: sub_i8_imm
%a.addr = alloca i8, align 4
%0 = sub i8 %a, 22;
-; ELF64: addi
+; PPC64: addi
store i8 %0, i8* %a.addr, align 4
ret void
}
define void @sub_i16(i16 %a, i16 %b) nounwind {
entry:
-; ELF64: sub_i16
+; PPC64: sub_i16
%a.addr = alloca i16, align 4
%0 = sub i16 %a, %b
-; ELF64: sub
+; PPC64: sub
store i16 %0, i16* %a.addr, align 4
ret void
}
define void @sub_i16_imm(i16 %a) nounwind {
entry:
-; ELF64: sub_i16_imm
+; PPC64: sub_i16_imm
%a.addr = alloca i16, align 4
%0 = sub i16 %a, 247;
-; ELF64: addi
+; PPC64: addi
store i16 %0, i16* %a.addr, align 4
ret void
}
define void @sub_i16_badimm(i16 %a) nounwind {
entry:
-; ELF64: sub_i16_imm
+; PPC64: sub_i16_imm
%a.addr = alloca i16, align 4
%0 = sub i16 %a, -32768;
-; ELF64: sub
+; PPC64: sub
store i16 %0, i16* %a.addr, align 4
ret void
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-branch.ll b/llvm/test/CodeGen/PowerPC/fast-isel-branch.ll
new file mode 100644
index 0000000000000..2fbf2a3ac21fd
--- /dev/null
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-branch.ll
@@ -0,0 +1,105 @@
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
+; RUN: llc -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck %s -check-prefix=ELF64
+; RUN: llc -mtriple=powerpc64-ibm-aix-xcoff < %s | FileCheck %s -check-prefix=AIX64
+
+ at x = global i32 1000, align 4
+
+define signext i32 @bar() #0 {
+; ELF64-LABEL: bar:
+; ELF64: # %bb.0: # %entry
+; ELF64-NEXT: mflr 0
+; ELF64-NEXT: std 0, 16(1)
+; ELF64-NEXT: stdu 1, -48(1)
+; ELF64-NEXT: .cfi_def_cfa_offset 48
+; ELF64-NEXT: .cfi_offset lr, 16
+; ELF64-NEXT: li 3, 0
+; ELF64-NEXT: stw 3, 44(1)
+; ELF64-NEXT: li 3, 0
+; ELF64-NEXT: stw 3, 40(1)
+; ELF64-NEXT: .LBB0_1: # %for.cond
+; ELF64-NEXT: #
+; ELF64-NEXT: lwz 3, 40(1)
+; ELF64-NEXT: addis 4, 2, .LC0 at toc@ha
+; ELF64-NEXT: ld 4, .LC0 at toc@l(4)
+; ELF64-NEXT: lwz 4, 0(4)
+; ELF64-NEXT: cmpw 3, 4
+; ELF64-NEXT: bge 0, .LBB0_4
+; ELF64-NEXT: # %bb.2: # %for.body
+; ELF64-NEXT: #
+; ELF64-NEXT: bl foo
+; ELF64-NEXT: nop
+; ELF64-NEXT: # %bb.3: # %for.inc
+; ELF64-NEXT: #
+; ELF64-NEXT: lwz 3, 40(1)
+; ELF64-NEXT: addi 3, 3, 1
+; ELF64-NEXT: stw 3, 40(1)
+; ELF64-NEXT: b .LBB0_1
+; ELF64-NEXT: .LBB0_4: # %for.end
+; ELF64-NEXT: li 3, 0
+; ELF64-NEXT: addi 1, 1, 48
+; ELF64-NEXT: ld 0, 16(1)
+; ELF64-NEXT: mtlr 0
+; ELF64-NEXT: blr
+;
+; AIX64-LABEL: bar:
+; AIX64: # %bb.0: # %entry
+; AIX64-NEXT: mflr 0
+; AIX64-NEXT: std 0, 16(1)
+; AIX64-NEXT: stdu 1, -128(1)
+; AIX64-NEXT: li 3, 0
+; AIX64-NEXT: stw 3, 124(1)
+; AIX64-NEXT: li 3, 0
+; AIX64-NEXT: stw 3, 120(1)
+; AIX64-NEXT: L..BB0_1: # %for.cond
+; AIX64-NEXT: #
+; AIX64-NEXT: lwz 3, 120(1)
+; AIX64-NEXT: ld 4, L..C0(2)
+; AIX64-NEXT: lwz 4, 0(4)
+; AIX64-NEXT: cmpw 3, 4
+; AIX64-NEXT: bge 0, L..BB0_4
+; AIX64-NEXT: # %bb.2: # %for.body
+; AIX64-NEXT: #
+; AIX64-NEXT: bl .foo[PR]
+; AIX64-NEXT: nop
+; AIX64-NEXT: # %bb.3: # %for.inc
+; AIX64-NEXT: #
+; AIX64-NEXT: lwz 3, 120(1)
+; AIX64-NEXT: addi 3, 3, 1
+; AIX64-NEXT: stw 3, 120(1)
+; AIX64-NEXT: b L..BB0_1
+; AIX64-NEXT: L..BB0_4: # %for.end
+; AIX64-NEXT: li 3, 0
+; AIX64-NEXT: addi 1, 1, 128
+; AIX64-NEXT: ld 0, 16(1)
+; AIX64-NEXT: mtlr 0
+; AIX64-NEXT: blr
+entry:
+ %retval = alloca i32, align 4
+ %i = alloca i32, align 4
+ store i32 0, i32* %retval, align 4
+ store i32 0, i32* %i, align 4
+ br label %for.cond
+
+for.cond:
+ %0 = load i32, i32* %i, align 4
+ %1 = load i32, i32* @x, align 4
+ %cmp = icmp slt i32 %0, %1
+ br i1 %cmp, label %for.body, label %for.end
+
+for.body:
+ call void bitcast (void (...)* @foo to void ()*)()
+ br label %for.inc
+
+for.inc:
+ %2 = load i32, i32* %i, align 4
+ %inc = add nsw i32 %2, 1
+ store i32 %inc, i32* %i, align 4
+ br label %for.cond
+
+for.end:
+ ret i32 0
+}
+
+declare void @foo(...)
+
+attributes #0 = { optnone noinline }
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-const.ll b/llvm/test/CodeGen/PowerPC/fast-isel-const.ll
index c0b9fe43926a7..a967ad67e36cb 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-const.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-const.ll
@@ -1,27 +1,28 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
define zeroext i1 @testi1(i8 %in) nounwind {
entry:
%c = icmp eq i8 %in, 5
br i1 %c, label %true, label %false
-; ELF64-LABEL: @testi1
+; PPC64-LABEL: @testi1
true:
br label %end
-; ELF64-NOT: li {{[0-9]+}}, -1
-; ELF64: li {{[0-9]+}}, 1
+; PPC64-NOT: li {{[0-9]+}}, -1
+; PPC64: li {{[0-9]+}}, 1
false:
br label %end
-; ELF64: li {{[0-9]+}}, 0
+; PPC64: li {{[0-9]+}}, 0
end:
%r = phi i1 [ 0, %false], [ 1, %true ]
ret i1 %r
-; ELF64: blr
+; PPC64: blr
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-crash.ll b/llvm/test/CodeGen/PowerPC/fast-isel-crash.ll
index e20ef6bcd5d3c..f841cea9d0d40 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-crash.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-crash.ll
@@ -1,4 +1,5 @@
; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7
; Ensure this doesn't crash.
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-ext.ll b/llvm/test/CodeGen/PowerPC/fast-isel-ext.ll
index 510f14888385e..bc933aac5f51f 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-ext.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-ext.ll
@@ -1,75 +1,76 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
; zext
define i32 @zext_8_32(i8 %a) nounwind {
-; ELF64: zext_8_32
+; PPC64: zext_8_32
%r = zext i8 %a to i32
-; ELF64: clrlwi {{[0-9]+}}, {{[0-9]+}}, 24
+; PPC64: clrlwi {{[0-9]+}}, {{[0-9]+}}, 24
ret i32 %r
}
define i32 @zext_16_32(i16 %a) nounwind {
-; ELF64: zext_16_32
+; PPC64: zext_16_32
%r = zext i16 %a to i32
-; ELF64: clrlwi {{[0-9]+}}, {{[0-9]+}}, 16
+; PPC64: clrlwi {{[0-9]+}}, {{[0-9]+}}, 16
ret i32 %r
}
define i64 @zext_8_64(i8 %a) nounwind {
-; ELF64: zext_8_64
+; PPC64: zext_8_64
%r = zext i8 %a to i64
-; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 56
+; PPC64: clrldi {{[0-9]+}}, {{[0-9]+}}, 56
ret i64 %r
}
define i64 @zext_16_64(i16 %a) nounwind {
-; ELF64: zext_16_64
+; PPC64: zext_16_64
%r = zext i16 %a to i64
-; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48
+; PPC64: clrldi {{[0-9]+}}, {{[0-9]+}}, 48
ret i64 %r
}
define i64 @zext_32_64(i32 %a) nounwind {
-; ELF64: zext_32_64
+; PPC64: zext_32_64
%r = zext i32 %a to i64
-; ELF64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32
+; PPC64: clrldi {{[0-9]+}}, {{[0-9]+}}, 32
ret i64 %r
}
; sext
define i32 @sext_8_32(i8 %a) nounwind {
-; ELF64: sext_8_32
+; PPC64: sext_8_32
%r = sext i8 %a to i32
-; ELF64: extsb
+; PPC64: extsb
ret i32 %r
}
define i32 @sext_16_32(i16 %a) nounwind {
-; ELF64: sext_16_32
+; PPC64: sext_16_32
%r = sext i16 %a to i32
-; ELF64: extsh
+; PPC64: extsh
ret i32 %r
}
define i64 @sext_8_64(i8 %a) nounwind {
-; ELF64: sext_8_64
+; PPC64: sext_8_64
%r = sext i8 %a to i64
-; ELF64: extsb
+; PPC64: extsb
ret i64 %r
}
define i64 @sext_16_64(i16 %a) nounwind {
-; ELF64: sext_16_64
+; PPC64: sext_16_64
%r = sext i16 %a to i64
-; ELF64: extsh
+; PPC64: extsh
ret i64 %r
}
define i64 @sext_32_64(i32 %a) nounwind {
-; ELF64: sext_32_64
+; PPC64: sext_32_64
%r = sext i32 %a to i64
-; ELF64: extsw
+; PPC64: extsw
ret i64 %r
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-fold.ll b/llvm/test/CodeGen/PowerPC/fast-isel-fold.ll
index 24cdca35b0dda..851e4f44ff8d2 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-fold.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-fold.ll
@@ -1,36 +1,37 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
@a = global i8 1, align 1
@b = global i16 2, align 2
@c = global i32 4, align 4
define void @t1() nounwind {
-; ELF64: t1
+; PPC64: t1
%1 = load i8, i8* @a, align 1
call void @foo1(i8 zeroext %1)
-; ELF64: lbz
-; ELF64-NOT: rldicl
-; ELF64-NOT: rlwinm
+; PPC64: lbz
+; PPC64-NOT: rldicl
+; PPC64-NOT: rlwinm
ret void
}
define void @t2() nounwind {
-; ELF64: t2
+; PPC64: t2
%1 = load i16, i16* @b, align 2
call void @foo2(i16 zeroext %1)
-; ELF64: lhz
-; ELF64-NOT: rldicl
-; ELF64-NOT: rlwinm
+; PPC64: lhz
+; PPC64-NOT: rldicl
+; PPC64-NOT: rlwinm
ret void
}
define void @t2a() nounwind {
-; ELF64: t2a
+; PPC64: t2a
%1 = load i32, i32* @c, align 4
call void @foo3(i32 zeroext %1)
-; ELF64: lwz
-; ELF64-NOT: rldicl
-; ELF64-NOT: rlwinm
+; PPC64: lwz
+; PPC64-NOT: rldicl
+; PPC64-NOT: rlwinm
ret void
}
@@ -39,91 +40,91 @@ declare void @foo2(i16 zeroext)
declare void @foo3(i32 zeroext)
define i32 @t3() nounwind {
-; ELF64: t3
+; PPC64: t3
%1 = load i8, i8* @a, align 1
%2 = zext i8 %1 to i32
-; ELF64: lbz
-; ELF64-NOT: rlwinm
+; PPC64: lbz
+; PPC64-NOT: rlwinm
ret i32 %2
}
define i32 @t4() nounwind {
-; ELF64: t4
+; PPC64: t4
%1 = load i16, i16* @b, align 2
%2 = zext i16 %1 to i32
-; ELF64: lhz
-; ELF64-NOT: rlwinm
+; PPC64: lhz
+; PPC64-NOT: rlwinm
ret i32 %2
}
define i32 @t5() nounwind {
-; ELF64: t5
+; PPC64: t5
%1 = load i16, i16* @b, align 2
%2 = sext i16 %1 to i32
-; ELF64: lha
-; ELF64-NOT: rlwinm
+; PPC64: lha
+; PPC64-NOT: rlwinm
ret i32 %2
}
define i32 @t6() nounwind {
-; ELF64: t6
+; PPC64: t6
%1 = load i8, i8* @a, align 2
%2 = sext i8 %1 to i32
-; ELF64: lbz
-; ELF64-NOT: rlwinm
+; PPC64: lbz
+; PPC64-NOT: rlwinm
ret i32 %2
}
define i64 @t7() nounwind {
-; ELF64: t7
+; PPC64: t7
%1 = load i8, i8* @a, align 1
%2 = zext i8 %1 to i64
-; ELF64: lbz
-; ELF64-NOT: rldicl
+; PPC64: lbz
+; PPC64-NOT: rldicl
ret i64 %2
}
define i64 @t8() nounwind {
-; ELF64: t8
+; PPC64: t8
%1 = load i16, i16* @b, align 2
%2 = zext i16 %1 to i64
-; ELF64: lhz
-; ELF64-NOT: rldicl
+; PPC64: lhz
+; PPC64-NOT: rldicl
ret i64 %2
}
define i64 @t9() nounwind {
-; ELF64: t9
+; PPC64: t9
%1 = load i16, i16* @b, align 2
%2 = sext i16 %1 to i64
-; ELF64: lha
-; ELF64-NOT: extsh
+; PPC64: lha
+; PPC64-NOT: extsh
ret i64 %2
}
define i64 @t10() nounwind {
-; ELF64: t10
+; PPC64: t10
%1 = load i8, i8* @a, align 2
%2 = sext i8 %1 to i64
-; ELF64: lbz
-; ELF64: extsb
+; PPC64: lbz
+; PPC64: extsb
ret i64 %2
}
define i64 @t11() nounwind {
-; ELF64: t11
+; PPC64: t11
%1 = load i32, i32* @c, align 4
%2 = zext i32 %1 to i64
-; ELF64: lwz
-; ELF64-NOT: rldicl
+; PPC64: lwz
+; PPC64-NOT: rldicl
ret i64 %2
}
define i64 @t12() nounwind {
-; ELF64: t12
+; PPC64: t12
%1 = load i32, i32* @c, align 4
%2 = sext i32 %1 to i64
-; ELF64: lwa
-; ELF64-NOT: extsw
+; PPC64: lwa
+; PPC64-NOT: extsw
ret i64 %2
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-i64offset.ll b/llvm/test/CodeGen/PowerPC/fast-isel-i64offset.ll
index c510beb2b855a..3d185dbeba082 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-i64offset.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-i64offset.ll
@@ -1,4 +1,5 @@
; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux-gnu -fast-isel -O0 < %s | FileCheck %s
+; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -fast-isel -O0 < %s | FileCheck %s
; Verify that pointer offsets larger than 32 bits work correctly.
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-indirectbr.ll b/llvm/test/CodeGen/PowerPC/fast-isel-indirectbr.ll
index d66fd1fb752d4..89f94999949b5 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-indirectbr.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-indirectbr.ll
@@ -1,8 +1,9 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
define void @t1(i8* %x) nounwind {
entry:
-; ELF64: t1
+; PPC64: t1
br label %L0
L0:
@@ -10,6 +11,6 @@ L0:
L1:
indirectbr i8* %x, [ label %L0, label %L1 ]
-; ELF64: mtctr 3
-; ELF64: bctr
+; PPC64: mtctr 3
+; PPC64: bctr
}
diff --git a/llvm/test/CodeGen/PowerPC/fast-isel-shifter.ll b/llvm/test/CodeGen/PowerPC/fast-isel-shifter.ll
index 04cb41920605a..4f6b3f16b809f 100644
--- a/llvm/test/CodeGen/PowerPC/fast-isel-shifter.ll
+++ b/llvm/test/CodeGen/PowerPC/fast-isel-shifter.ll
@@ -1,49 +1,50 @@
-; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
+; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-ibm-aix-xcoff -mcpu=pwr7 | FileCheck %s --check-prefix=PPC64
define i32 @shl() nounwind {
entry:
-; ELF64: shl
-; ELF64: slw
+; PPC64: shl
+; PPC64: slw
%shl = shl i32 -1, 2
ret i32 %shl
}
define i32 @shl_reg(i32 %src1, i32 %src2) nounwind {
entry:
-; ELF64: shl_reg
-; ELF64: slw
+; PPC64: shl_reg
+; PPC64: slw
%shl = shl i32 %src1, %src2
ret i32 %shl
}
define i32 @lshr() nounwind {
entry:
-; ELF64: lshr
-; ELF64: srw
+; PPC64: lshr
+; PPC64: srw
%lshr = lshr i32 -1, 2
ret i32 %lshr
}
define i32 @lshr_reg(i32 %src1, i32 %src2) nounwind {
entry:
-; ELF64: lshr_reg
-; ELF64: srw
+; PPC64: lshr_reg
+; PPC64: srw
%lshr = lshr i32 %src1, %src2
ret i32 %lshr
}
define i32 @ashr() nounwind {
entry:
-; ELF64: ashr
-; ELF64: srawi
+; PPC64: ashr
+; PPC64: srawi
%ashr = ashr i32 -1, 2
ret i32 %ashr
}
define i32 @ashr_reg(i32 %src1, i32 %src2) nounwind {
entry:
-; ELF64: ashr_reg
-; ELF64: sraw
+; PPC64: ashr_reg
+; PPC64: sraw
%ashr = ashr i32 %src1, %src2
ret i32 %ashr
}
More information about the llvm-commits
mailing list