in function cryptcompress_truncate() from reiserfs4 patch compiler uses __cmpdi2 for old_size vs new_size (64 bit) comparision: result = (old_size < new_size ? cryptcompress_append_hole(inode, new_size) : prune_cryptcompress(inode, new_size, update_sd, aidx)); in another case for simple foo() method gcc inlines __cmpdi2 equivalent: int foo(long long x, long long y) { return (x < y); } foo: cmpw 7,5,3 li 0,0 bgt- 7,.L3 cmplw 6,6,4 beq- 7,.L6 .L2: mr 3,0 blr .L6: ble- 6,.L2 .L3: li 0,1 mr 3,0 blr what decides which variant is chosen? is it possible to force inlining? # gcc-4.0.0+pr20973+pr21173
-- Summary: unnecessary __cmpdi2 usage? Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: other AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: pluto at pld-linux dot org CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-pld-linux GCC host triplet: i686-pld-linux GCC target triplet: ppc-pld-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21237