1e858f512SMartin Sebor; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2e858f512SMartin Sebor; Test that the isascii library call simplifier works correctly even for 3e858f512SMartin Sebor; targets with 16-bit int. 4e858f512SMartin Sebor; 5e86d6a43SAlex Richardson; RUN: opt < %s -mtriple=avr-freebsd -passes=instcombine -S | FileCheck %s --check-prefix=AVR 6e86d6a43SAlex Richardson; RUN: opt < %s -mtriple=msp430-linux -passes=instcombine -S | FileCheck %s --check-prefix=MSP430 7*1e029cf5SAlex Richardson; REQUIRES: avr-registered-target,msp430-registered-target 8e858f512SMartin Sebor 9e858f512SMartin Sebordeclare i16 @isascii(i16) 10e858f512SMartin Sebor 11e858f512SMartin Sebordeclare void @sink(i16) 12e858f512SMartin Sebor 13e858f512SMartin Sebor 14e858f512SMartin Sebordefine void @fold_isascii(i16 %c) { 15e86d6a43SAlex Richardson; AVR-LABEL: @fold_isascii( 16e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 1) 17e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 1) 18e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 1) 19e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 0) 20e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 0) 21e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 0) 22e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 0) 23e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 0) 24e86d6a43SAlex Richardson; AVR-NEXT: [[ISASCII:%.*]] = icmp ult i16 [[C:%.*]], 128 25e86d6a43SAlex Richardson; AVR-NEXT: [[IC:%.*]] = zext i1 [[ISASCII]] to i16 26e39f6c18SAlex Richardson; AVR-NEXT: call addrspace(1) void @sink(i16 [[IC]]) 27e86d6a43SAlex Richardson; AVR-NEXT: ret void 28e86d6a43SAlex Richardson; 29e86d6a43SAlex Richardson; MSP430-LABEL: @fold_isascii( 30e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 1) 31e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 1) 32e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 1) 33e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 0) 34e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 0) 35e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 0) 36e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 0) 37e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 0) 38e86d6a43SAlex Richardson; MSP430-NEXT: [[ISASCII:%.*]] = icmp ult i16 [[C:%.*]], 128 39e86d6a43SAlex Richardson; MSP430-NEXT: [[IC:%.*]] = zext i1 [[ISASCII]] to i16 40e86d6a43SAlex Richardson; MSP430-NEXT: call void @sink(i16 [[IC]]) 41e86d6a43SAlex Richardson; MSP430-NEXT: ret void 42e858f512SMartin Sebor; 43e858f512SMartin Sebor %i0 = call i16 @isascii(i16 0) 44e858f512SMartin Sebor call void @sink(i16 %i0) 45e858f512SMartin Sebor 46e858f512SMartin Sebor %i1 = call i16 @isascii(i16 1) 47e858f512SMartin Sebor call void @sink(i16 %i1) 48e858f512SMartin Sebor 49e858f512SMartin Sebor %i127 = call i16 @isascii(i16 127) 50e858f512SMartin Sebor call void @sink(i16 %i127) 51e858f512SMartin Sebor 52e858f512SMartin Sebor %i128 = call i16 @isascii(i16 128) 53e858f512SMartin Sebor call void @sink(i16 %i128) 54e858f512SMartin Sebor 55e858f512SMartin Sebor %i255 = call i16 @isascii(i16 255) 56e858f512SMartin Sebor call void @sink(i16 %i255) 57e858f512SMartin Sebor 58e858f512SMartin Sebor %i256 = call i16 @isascii(i16 256) 59e858f512SMartin Sebor call void @sink(i16 %i256) 60e858f512SMartin Sebor 61e858f512SMartin Sebor ; Fold isascii(INT_MAX) to 0. The call is valid with all int values. 62e858f512SMartin Sebor %imax = call i16 @isascii(i16 32767) 63e858f512SMartin Sebor call void @sink(i16 %imax) 64e858f512SMartin Sebor 65e858f512SMartin Sebor %uimax = call i16 @isascii(i16 65535) 66e858f512SMartin Sebor call void @sink(i16 %uimax) 67e858f512SMartin Sebor 68e858f512SMartin Sebor %ic = call i16 @isascii(i16 %c) 69e858f512SMartin Sebor call void @sink(i16 %ic) 70e858f512SMartin Sebor 71e858f512SMartin Sebor ret void 72e858f512SMartin Sebor} 73