1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=sparc | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: llc -O0 < %s -march=sparc | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker;; llc -O0 used to try to spill Y to the stack, which isn't possible, 5*9880d681SAndroid Build Coastguard Worker;; and then crashed. Additionally, in -O1, it would omit the second 6*9880d681SAndroid Build Coastguard Worker;; apparently-redundant wr to %y, which is not actually redundant 7*9880d681SAndroid Build Coastguard Worker;; because the spec says to treat %y as potentially-written by udiv. 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: two_divides: 10*9880d681SAndroid Build Coastguard Worker; CHECK: wr %g0, %g0, %y 11*9880d681SAndroid Build Coastguard Worker; CHECK: udiv 12*9880d681SAndroid Build Coastguard Worker; CHECK: wr %g0, %g0, %y 13*9880d681SAndroid Build Coastguard Worker; CHECK: udiv 14*9880d681SAndroid Build Coastguard Worker; CHECK: add 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i32 @two_divides(i32 %a, i32 %b) { 17*9880d681SAndroid Build Coastguard Worker %r = udiv i32 %a, %b 18*9880d681SAndroid Build Coastguard Worker %r2 = udiv i32 %b, %a 19*9880d681SAndroid Build Coastguard Worker %r3 = add i32 %r, %r2 20*9880d681SAndroid Build Coastguard Worker ret i32 %r3 21*9880d681SAndroid Build Coastguard Worker} 22