1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=arm64 -o - %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; This is mostly a "don't assert" test. The type of the RHS of a shift depended 4*9880d681SAndroid Build Coastguard Worker; on the phase of legalization, which led to the creation of an unexpected and 5*9880d681SAndroid Build Coastguard Worker; unselectable "rotr" node: (i32 (rotr i32, i64)). 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker; FIXME: This test is xfailed because it relies on an optimization that has 8*9880d681SAndroid Build Coastguard Worker; been reverted (see PR17975). 9*9880d681SAndroid Build Coastguard Worker; XFAIL: * 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerdefine void @foo(i64* nocapture %d) { 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo: 13*9880d681SAndroid Build Coastguard Worker; CHECK: rorv 14*9880d681SAndroid Build Coastguard Worker %tmp = load i64, i64* undef, align 8 15*9880d681SAndroid Build Coastguard Worker %sub397 = sub i64 0, %tmp 16*9880d681SAndroid Build Coastguard Worker %and398 = and i64 %sub397, 4294967295 17*9880d681SAndroid Build Coastguard Worker %shr404 = lshr i64 %and398, 0 18*9880d681SAndroid Build Coastguard Worker %or405 = or i64 0, %shr404 19*9880d681SAndroid Build Coastguard Worker %xor406 = xor i64 %or405, 0 20*9880d681SAndroid Build Coastguard Worker %xor417 = xor i64 0, %xor406 21*9880d681SAndroid Build Coastguard Worker %xor428 = xor i64 0, %xor417 22*9880d681SAndroid Build Coastguard Worker %sub430 = sub i64 %xor417, 0 23*9880d681SAndroid Build Coastguard Worker %and431 = and i64 %sub430, 4294967295 24*9880d681SAndroid Build Coastguard Worker %and432 = and i64 %xor428, 31 25*9880d681SAndroid Build Coastguard Worker %sub433 = sub i64 32, %and432 26*9880d681SAndroid Build Coastguard Worker %shl434 = shl i64 %and431, %sub433 27*9880d681SAndroid Build Coastguard Worker %shr437 = lshr i64 %and431, %and432 28*9880d681SAndroid Build Coastguard Worker %or438 = or i64 %shl434, %shr437 29*9880d681SAndroid Build Coastguard Worker %xor439 = xor i64 %or438, %xor428 30*9880d681SAndroid Build Coastguard Worker %sub441 = sub i64 %xor439, 0 31*9880d681SAndroid Build Coastguard Worker store i64 %sub441, i64* %d, align 8 32*9880d681SAndroid Build Coastguard Worker ret void 33*9880d681SAndroid Build Coastguard Worker} 34