I noticed that functions from DSO looks to be always called via PLT+GOT on elf32-i386 linked with modern ld. I think the same approach as was used in X86_64TargetInfo::relocNeedsPlt() should be applied here.
I took the object file and dso from relocation-i686.s test and linked them to executable:
ld --emit-relocs -melf_i386 tmain.o tshared.so -o tmain
And found that .dynamic_reloc section has calls to PLT.
Disassembly of section .dynamic_reloc:
08048199 <.dynamic_reloc>:
8048199: e8 d6 ff ff ff call 8048174 <bar@plt+0x4>
So this fix makes the behavior to be consistent with ld.