1*9880d681SAndroid Build Coastguard Worker; Test 64-bit XORs in which the second operand is constant. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Check the lowest useful XILF value. 6*9880d681SAndroid Build Coastguard Workerdefine i64 @f1(i64 %a) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: xilf %r2, 1 9*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 10*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, 1 11*9880d681SAndroid Build Coastguard Worker ret i64 %xor 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker; Check the high end of the XILF range. 15*9880d681SAndroid Build Coastguard Workerdefine i64 @f2(i64 %a) { 16*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 17*9880d681SAndroid Build Coastguard Worker; CHECK: xilf %r2, 4294967295 18*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 19*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, 4294967295 20*9880d681SAndroid Build Coastguard Worker ret i64 %xor 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; Check the lowest useful XIHF value, which is one up from the above. 24*9880d681SAndroid Build Coastguard Workerdefine i64 @f3(i64 %a) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 26*9880d681SAndroid Build Coastguard Worker; CHECK: xihf %r2, 1 27*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 28*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, 4294967296 29*9880d681SAndroid Build Coastguard Worker ret i64 %xor 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Worker; Check the next value up again, which needs a combination of XIHF and XILF. 33*9880d681SAndroid Build Coastguard Workerdefine i64 @f4(i64 %a) { 34*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 35*9880d681SAndroid Build Coastguard Worker; CHECK: xihf %r2, 1 36*9880d681SAndroid Build Coastguard Worker; CHECK: xilf %r2, 4294967295 37*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 38*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, 8589934591 39*9880d681SAndroid Build Coastguard Worker ret i64 %xor 40*9880d681SAndroid Build Coastguard Worker} 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Worker; Check the high end of the XIHF range. 43*9880d681SAndroid Build Coastguard Workerdefine i64 @f5(i64 %a) { 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 45*9880d681SAndroid Build Coastguard Worker; CHECK: xihf %r2, 4294967295 46*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 47*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, -4294967296 48*9880d681SAndroid Build Coastguard Worker ret i64 %xor 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker; Check the next value up, which again must use XIHF and XILF. 52*9880d681SAndroid Build Coastguard Workerdefine i64 @f6(i64 %a) { 53*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 54*9880d681SAndroid Build Coastguard Worker; CHECK: xihf %r2, 4294967295 55*9880d681SAndroid Build Coastguard Worker; CHECK: xilf %r2, 1 56*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 57*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, -4294967295 58*9880d681SAndroid Build Coastguard Worker ret i64 %xor 59*9880d681SAndroid Build Coastguard Worker} 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker; Check full bitwise negation 62*9880d681SAndroid Build Coastguard Workerdefine i64 @f7(i64 %a) { 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 64*9880d681SAndroid Build Coastguard Worker; CHECK: xihf %r2, 4294967295 65*9880d681SAndroid Build Coastguard Worker; CHECK: xilf %r2, 4294967295 66*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 67*9880d681SAndroid Build Coastguard Worker %xor = xor i64 %a, -1 68*9880d681SAndroid Build Coastguard Worker ret i64 %xor 69*9880d681SAndroid Build Coastguard Worker} 70