brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · ab5f130 Raw
48 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2;3; Test that the ffs library call simplifier works correctly even for4; targets with 16-bit int.5;6; RUN: opt < %s -mtriple=avr-linux -passes=instcombine -S | FileCheck %s --check-prefix=AVR7; RUN: opt < %s -mtriple=msp430-linux -passes=instcombine -S | FileCheck %s --check-prefix=MSP4308; REQUIRES: avr-registered-target,msp430-registered-target9 10 11declare i16 @ffs(i16)12 13declare void @sink(i16)14 15 16define void @fold_ffs(i16 %x) {17; AVR-LABEL: @fold_ffs(18; AVR-NEXT:    call addrspace(1) void @sink(i16 0)19; AVR-NEXT:    call addrspace(1) void @sink(i16 1)20; AVR-NEXT:    [[CTTZ:%.*]] = call range(i16 0, 17) addrspace(1) i16 @llvm.cttz.i16(i16 [[X:%.*]], i1 true)21; AVR-NEXT:    [[TMP1:%.*]] = add nuw nsw i16 [[CTTZ]], 122; AVR-NEXT:    [[DOTNOT:%.*]] = icmp eq i16 [[X]], 023; AVR-NEXT:    [[NX:%.*]] = select i1 [[DOTNOT]], i16 0, i16 [[TMP1]]24; AVR-NEXT:    call addrspace(1) void @sink(i16 [[NX]])25; AVR-NEXT:    ret void26;27; MSP430-LABEL: @fold_ffs(28; MSP430-NEXT:    call void @sink(i16 0)29; MSP430-NEXT:    call void @sink(i16 1)30; MSP430-NEXT:    [[CTTZ:%.*]] = call range(i16 0, 17) i16 @llvm.cttz.i16(i16 [[X:%.*]], i1 true)31; MSP430-NEXT:    [[TMP1:%.*]] = add nuw nsw i16 [[CTTZ]], 132; MSP430-NEXT:    [[DOTNOT:%.*]] = icmp eq i16 [[X]], 033; MSP430-NEXT:    [[NX:%.*]] = select i1 [[DOTNOT]], i16 0, i16 [[TMP1]]34; MSP430-NEXT:    call void @sink(i16 [[NX]])35; MSP430-NEXT:    ret void36;37  %n0 = call i16 @ffs(i16 0)38  call void @sink(i16 %n0)39 40  %n1 = call i16 @ffs(i16 1)41  call void @sink(i16 %n1)42 43  %nx = call i16 @ffs(i16 %x)44  call void @sink(i16 %nx)45 46  ret void47}48