日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?...

發(fā)布時間:2025/3/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)我在this question中提出時,gcc正在移除(是的,使用 -O0 )一行代碼 _mm_div_ss(s1, s2); ,大概是因為結(jié)果未保存 . 但是,這應(yīng)該觸發(fā)浮點異常并引發(fā)SIGFPE,如果刪除調(diào)用則不會發(fā)生這種情況 .

Question :是否有一個標(biāo)志或多個標(biāo)志傳遞給gcc,以便代碼按原樣編譯?我正在考慮像 fno-remove-unused 這樣的東西,但是我支持使用gcc屬性/ pragma代替嗎?

我嘗試過的事情:

$ gcc --help=optimizers | grep -i remove

沒有結(jié)果 .

$ gcc --help=optimizers | grep -i unused

沒有結(jié)果 .

并明確禁用所有死代碼/消除標(biāo)志 - 請注意,沒有關(guān)于未使用代碼的警告:

$ gcc -O0 -msse2 -Wall -Wextra -pedantic -Winline \

-fno-dce -fno-dse -fno-tree-dce \

-fno-tree-dse -fno-tree-fre -fno-compare-elim -fno-gcse \

-fno-gcse-after-reload -fno-gcse-las -fno-rerun-cse-after-loop \

-fno-tree-builtin-call-dce -fno-tree-cselim a.c

a.c: In function ‘main’:

a.c:25:5: warning: ISO C90 forbids mixed declarations and code [-Wpedantic]

__m128 s1, s2;

^

$

來源計劃

#include

#include

#include

#include

static void sigaction_sfpe(int signal, siginfo_t *si, void *arg)

{

printf("%d,%d,%d\n", signal, si!=NULL?1:0, arg!=NULL?1:0);

printf("inside SIGFPE handler\nexit now.\n");

exit(1);

}

int main()

{

struct sigaction sa;

memset(&sa, 0, sizeof(sa));

sigemptyset(&sa.sa_mask);

sa.sa_sigaction = sigaction_sfpe;

sa.sa_flags = SA_SIGINFO;

sigaction(SIGFPE, &sa, NULL);

_mm_setcsr(0x00001D80);

__m128 s1, s2;

s1 = _mm_set_ps(1.0, 1.0, 1.0, 1.0);

s2 = _mm_set_ps(0.0, 0.0, 0.0, 0.0);

_mm_div_ss(s1, s2);

printf("done (no error).\n");

return 0;

}

編譯上面的程序給出了

$ ./a.out

done (no error).

換線

_mm_div_ss(s1, s2);

s2 = _mm_div_ss(s1, s2); // add "s2 = "

產(chǎn)生預(yù)期的結(jié)果:

$ ./a.out

inside SIGFPE handler

編輯更多細(xì)節(jié) .

這似乎與 _mm_div_ss definition上的 __always_inline__ 屬性有關(guān) .

$ cat t.c

int

div(int b)

{

return 1/b;

}

int main()

{

div(0);

return 0;

}

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

$

(沒有警告或錯誤)

$ ./t.out

Floating point exception

$

vs下面(功能屬性除外)

$ cat t.c

__inline int __attribute__((__always_inline__))

div(int b)

{

return 1/b;

}

int main()

{

div(0);

return 0;

}

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

$

(沒有警告或錯誤)

$ ./t.out

$

添加函數(shù)屬性 __warn_unused_result__ 至少會給出一條有用的消息:

$ gcc -O0 -Wall -Wextra -pedantic -Winline t.c -o t.out

t.c: In function ‘main’:

t.c:9:5: warning: ignoring return value of ‘div’, declared with attribute warn_unused_result [-Wunused-result]

div(0);

^

編輯:

關(guān)于gcc mailing list的一些討論 . 最終,我認(rèn)為一切都按預(yù)期工作 .

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java代码修改触发编译_gcc -O0仍然优化了“未使用”的代码 . 是否有一个编译标志来改变它?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。