1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 03:53:04 +02:00
llvm-mirror/test/CodeGen/AArch64/subs-to-sub-opt.ll
Evgeny Astigeevich 4405b74d21 [AArch64][CodeGen] Fix of PR27158: incorrect peephole optimization in AArch64InstrInfo::optimizeCompareInstr
AArch64InstrInfo::optimizeCompareInstr has bug PR27158 which causes generation of incorrect code.
A compare instruction is substituted with another instruction which does not
produce the same flags as the original compare instruction.
This patch contains:
1. Fix of the bug.
2. A regression test in MIR.
3. A new test to check that SUBS is replaced by SUB.

Differential Revision: http://reviews.llvm.org/D18838

llvm-svn: 266969
2016-04-21 08:54:08 +00:00

24 lines
591 B
LLVM

; RUN: llc -mtriple=aarch64-linux-gnu -O3 -o - %s | FileCheck %s
@a = external global i8, align 1
@b = external global i8, align 1
; Test that SUBS is replaced by SUB if condition flags are not used.
define i32 @test01() nounwind {
; CHECK: ldrb {{.*}}
; CHECK-NEXT: ldrb {{.*}}
; CHECK-NEXT: sub {{.*}}
; CHECK-NEXT: cmn {{.*}}
entry:
%0 = load i8, i8* @a, align 1
%conv = zext i8 %0 to i32
%1 = load i8, i8* @b, align 1
%conv1 = zext i8 %1 to i32
%s = sub nsw i32 %conv1, %conv
%cmp0 = icmp eq i32 %s, -1
%cmp1 = sext i1 %cmp0 to i8
store i8 %cmp1, i8* @a
ret i32 0
}