Hello,
I'm wondering what was the original motivaton for the 'select' instruction.
Was it for convenience, or for some deep reason. I'm asking because it's
causing me some problems (see below) and I'd like to know I understand the
situation before working those problems around.
I have the following function:
int logsch(int ih,int nbh)
{
if(nbh < 0) { nbh = 0; ih = 10; }
if(nbh > 22528) { nbh = 22528; ih = 7; }
return(nbh + ih);
}
From the C language standpoint, there are 4 paths though this function: each
"if" can be either take or not. In reality, both "if" can't be taked at the
same time -- and that's why I'm trying to automatically figure out working on
LLVM representation. However, the LLVM code:
int %logsch(int %ih, int %nbh) {
entry:
%tmp.1 = setlt int %nbh, 0
%ih_addr.1 = select bool %tmp.1, int 10, int %ih
%nbh_addr.1 = select bool %tmp.1, int 0, int %nbh
%tmp.4 = setgt int %nbh_addr.1, 22528
%ih_addr.0 = select bool %tmp.4, int 7, int %ih_addr.1
%nbh_addr.0 = select bool %tmp.4, int 22528, int %nbh_addr.1
%tmp.8 = add int %nbh_addr.0, %ih_addr.0
ret int %tmp.8
}
Has 'select' instructions and a single path, which makes my task harder.
- Volodya