Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MIPS] BuildCondBr should preserve MO flags
While simplifying branches in the MachineInstr representation, the routine BuildCondBr must preserve flags on register MachineOperands. In particular, it must preserve the <undef> flag. This fixes a bug that is unlikely to occur in any real scenario, but which bugpoint is likely to introduce. Patch By Nick Johnson! Reviewers: ahatanak, sdardis Differential Revision: https://reviews.llvm.org/D34041 llvm-svn: 305290
- Loading branch information
Simon Dardis
committed
Jun 13, 2017
1 parent
9bd4d91
commit c38d391
Showing
2 changed files
with
29 additions
and
6 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,26 @@ | ||
; RUN: llc -march=mips -mcpu=mips32 -verify-machineinstrs -o /dev/null < %s | ||
; Confirm that MachineInstr branch simplification preserves | ||
; register operand flags, such as the <undef> flag. | ||
|
||
define void @ham() { | ||
bb: | ||
%tmp = alloca i32, align 4 | ||
%tmp13 = ptrtoint i32* %tmp to i32 | ||
%tmp70 = icmp eq i32 undef, -1 | ||
br i1 %tmp70, label %bb72, label %bb40 | ||
|
||
bb72: ; preds = %bb72, %bb | ||
br i1 undef, label %bb40, label %bb72 | ||
|
||
bb40: ; preds = %bb72, %bb | ||
%tmp41 = phi i32 [ %tmp13, %bb72 ], [ %tmp13, %bb ] | ||
%tmp55 = inttoptr i32 %tmp41 to i32* | ||
%tmp58 = insertelement <2 x i32*> undef, i32* %tmp55, i32 1 | ||
br label %bb59 | ||
|
||
bb59: ; preds = %bb59, %bb40 | ||
%tmp60 = phi <2 x i32*> [ %tmp61, %bb59 ], [ %tmp58, %bb40 ] | ||
%tmp61 = getelementptr i32, <2 x i32*> %tmp60, <2 x i32> <i32 -1, i32 1> | ||
%tmp62 = extractelement <2 x i32*> %tmp61, i32 1 | ||
br label %bb59 | ||
} |