| ; 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 |
| } |