blob: 85ab999d00bd767888d2b6659d61f35fab76c86b [file] [edit]
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
; Test that DAGCombiner doesn't crash when combining CCMask with TM instruction
; where all bits in the mask are active (off-by-one error regression test).
;
; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s
define void @test_tm_full_mask(ptr %ptr) {
; CHECK-LABEL: test_tm_full_mask:
; CHECK: # %bb.0:
; CHECK-NEXT: lb %r0, 0(%r2)
; CHECK-NEXT: tmll %r0, 1
; CHECK-NEXT: lhi %r1, 1
; CHECK-NEXT: jne .LBB0_2
; CHECK-NEXT: # %bb.1:
; CHECK-NEXT: lr %r1, %r0
; CHECK-NEXT: .LBB0_2:
; CHECK-NEXT: tmll %r1, 1
; CHECK-NEXT: je .LBB0_4
; CHECK-NEXT: # %bb.3: # %if.then
; CHECK-NEXT: mvi 0(%r2), 1
; CHECK-NEXT: .LBB0_4: # %loop
; CHECK-NEXT: # =>This Inner Loop Header: Depth=1
; CHECK-NEXT: j .LBB0_4
%1 = load i1, ptr %ptr, align 4
%2 = freeze i1 %1
%3 = select i1 %2, i32 0, i32 -1973148440
%4 = trunc i32 %3 to i16
%5 = or disjoint i16 %4, 1
%6 = icmp ult i16 %5, 3
%7 = and i32 %3, -1973157888
%8 = icmp eq i32 %7, 0
%9 = select i1 %6, i1 %8, i1 %2
br i1 %9, label %if.then, label %loop
if.then:
store i1 true, ptr %ptr, align 4
br label %loop
loop:
br label %loop
}