| # RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=z13 \ | |
| # RUN: -start-before=register-coalescer -o - 2>&1 > /dev/null | |
| # Test that the SystemZ shouldCoalesce() implementation does not crash in | |
| # case of an undef use in another MBB. This was discovered in testing with | |
| # -systemz-subreg-liveness. | |
| --- | | |
| @g_74 = external dso_local unnamed_addr global i32, align 4 | |
| @g_193 = external dso_local unnamed_addr global i32, align 4 | |
| define dso_local void @main() local_unnamed_addr { | |
| %1 = load i32, ptr @g_193 | |
| %2 = or i32 %1, -1395153718 | |
| %3 = sdiv i32 -1395153718, %2 | |
| br i1 undef, label %5, label %4 | |
| ; <label>:4: ; preds = %0 | |
| store i32 %3, ptr @g_74 | |
| store i32 -9, ptr @g_74 | |
| ret void | |
| ; <label>:5: ; preds = %0 | |
| unreachable | |
| } | |
| ... | |
| --- | |
| name: main | |
| alignment: 16 | |
| tracksRegLiveness: true | |
| registers: | |
| - { id: 0, class: grx32bit } | |
| - { id: 1, class: addr64bit } | |
| - { id: 2, class: gr32bit } | |
| - { id: 3, class: gr32bit } | |
| - { id: 4, class: gr64bit } | |
| - { id: 5, class: gr128bit } | |
| - { id: 6, class: gr128bit } | |
| - { id: 7, class: grx32bit } | |
| - { id: 8, class: gr32bit } | |
| - { id: 9, class: gr128bit } | |
| body: | | |
| bb.0 (%ir-block.0): | |
| successors: %bb.2(0x00000001), %bb.1(0x7fffffff) | |
| %1:addr64bit = LARL @g_193 | |
| %2:gr32bit = IIFMux 2899813578 | |
| %3:gr32bit = COPY killed %2 | |
| %3:gr32bit = O %3, killed %1, 0, $noreg, implicit-def dead $cc :: (dereferenceable load (s32) from @g_193) | |
| %4:gr64bit = LGFI -1395153718 | |
| undef %5.subreg_l64:gr128bit = COPY killed %4 | |
| %6:gr128bit = COPY killed %5 | |
| dead %6:gr128bit = DSGFR %6, killed %3 | |
| %7:grx32bit = LHIMux 0 | |
| CHIMux killed %7, 0, implicit-def $cc | |
| BRC 14, 6, %bb.2, implicit killed $cc | |
| J %bb.1 | |
| bb.1 (%ir-block.4): | |
| %8:gr32bit = LHIMux -9 | |
| STRL killed %8, @g_74 :: (store (s32) into @g_74) | |
| Return | |
| bb.2 (%ir-block.5): | |
| dead %0:grx32bit = COPY undef %6.subreg_l32 | |
| ... |