1*9880d681SAndroid Build Coastguard Worker; Test 16-bit inequality comparisons between memory and a 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 low end of the unsigned 16-bit range. 6*9880d681SAndroid Build Coastguard Workerdefine double @f1(double %a, double %b, i16 *%ptr) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: clhhsi 0(%r2), 0 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blhr %r14 10*9880d681SAndroid Build Coastguard Worker; CHECK: ldr %f0, %f2 11*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 12*9880d681SAndroid Build Coastguard Worker %val = load i16 , i16 *%ptr 13*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i16 %val, 0 14*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, double %a, double %b 15*9880d681SAndroid Build Coastguard Worker ret double %res 16*9880d681SAndroid Build Coastguard Worker} 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; Check the high end of the unsigned 16-bit range. 19*9880d681SAndroid Build Coastguard Workerdefine double @f2(double %a, double %b, i16 *%ptr) { 20*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 21*9880d681SAndroid Build Coastguard Worker; CHECK: clhhsi 0(%r2), 65535 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blhr %r14 23*9880d681SAndroid Build Coastguard Worker; CHECK: ldr %f0, %f2 24*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 25*9880d681SAndroid Build Coastguard Worker %val = load i16 , i16 *%ptr 26*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i16 %val, 65535 27*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, double %a, double %b 28*9880d681SAndroid Build Coastguard Worker ret double %res 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; Check the low end of the signed 16-bit range. 32*9880d681SAndroid Build Coastguard Workerdefine double @f3(double %a, double %b, i16 *%ptr) { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 34*9880d681SAndroid Build Coastguard Worker; CHECK: clhhsi 0(%r2), 32768 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blhr %r14 36*9880d681SAndroid Build Coastguard Worker; CHECK: ldr %f0, %f2 37*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 38*9880d681SAndroid Build Coastguard Worker %val = load i16 , i16 *%ptr 39*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i16 %val, -32768 40*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, double %a, double %b 41*9880d681SAndroid Build Coastguard Worker ret double %res 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; Check the high end of the signed 16-bit range. 45*9880d681SAndroid Build Coastguard Workerdefine double @f4(double %a, double %b, i16 *%ptr) { 46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 47*9880d681SAndroid Build Coastguard Worker; CHECK: clhhsi 0(%r2), 32767 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: blhr %r14 49*9880d681SAndroid Build Coastguard Worker; CHECK: ldr %f0, %f2 50*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 51*9880d681SAndroid Build Coastguard Worker %val = load i16 , i16 *%ptr 52*9880d681SAndroid Build Coastguard Worker %cond = icmp ne i16 %val, 32767 53*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, double %a, double %b 54*9880d681SAndroid Build Coastguard Worker ret double %res 55*9880d681SAndroid Build Coastguard Worker} 56