| ; RUN: opt -passes=dfa-jump-threading -S --preserve-ll-uselistorder < %s | FileCheck %s | |
| ; Check that threading produces deterministic use lists for %v and %w. | |
| define void @f(i64 %v, i64 %w) { | |
| ; CHECK-LABEL: define void @f( | |
| ; CHECK: uselistorder i64 %v, { 2, 0, 4, 3, 1, 5 } | |
| ; CHECK: uselistorder i64 %w, { 2, 0, 4, 3, 1, 5 } | |
| entry: | |
| br label %header | |
| header: | |
| br i1 false, label %join, label %side | |
| side: | |
| br label %join | |
| join: | |
| %state = phi i32 [ 0, %side ], [ 1, %header ] | |
| br label %p1 | |
| p1: | |
| br label %use1 | |
| use1: | |
| %phi1 = phi i64 [ %v, %p1 ] | |
| br label %p2 | |
| p2: | |
| br label %use2 | |
| use2: | |
| %phi2 = phi i64 [ %w, %p2 ] | |
| br label %p3 | |
| p3: | |
| br label %use3 | |
| use3: | |
| %phi3 = phi i64 [ %v, %p3 ] | |
| br label %p4 | |
| p4: | |
| br label %use4 | |
| use4: | |
| %phi4 = phi i64 [ %w, %p4 ] | |
| br label %latch | |
| latch: | |
| switch i32 %state, label %exit [ | |
| i32 0, label %header | |
| i32 2, label %header | |
| ] | |
| exit: | |
| ret void | |
| } |