diff options
Diffstat (limited to 'test/CodeGen/builtins-ppc-altivec.c')
-rw-r--r-- | test/CodeGen/builtins-ppc-altivec.c | 1029 |
1 files changed, 1028 insertions, 1 deletions
diff --git a/test/CodeGen/builtins-ppc-altivec.c b/test/CodeGen/builtins-ppc-altivec.c index 8627499..e03e69c 100644 --- a/test/CodeGen/builtins-ppc-altivec.c +++ b/test/CodeGen/builtins-ppc-altivec.c @@ -32,7 +32,13 @@ int param_i; unsigned int param_ui; float param_f; +int res_sc; +int res_uc; +int res_s; +int res_us; int res_i; +int res_ui; +int res_f; // CHECK: define void @test1 void test1() { @@ -1761,9 +1767,958 @@ void test6() { res_vf = vec_vxor(vbi, vf); // CHECK: xor <4 x i32> res_vf = vec_vxor(vf, vbi); // CHECK: xor <4 x i32> + /* ------------------------------ extensions -------------------------------------- */ + + /* vec_extract */ + res_sc = vec_extract(vsc, param_i); // CHECK: extractelement <16 x i8> + res_uc = vec_extract(vuc, param_i); // CHECK: extractelement <16 x i8> + res_s = vec_extract(vs, param_i); // CHECK: extractelement <8 x i16> + res_us = vec_extract(vus, param_i); // CHECK: extractelement <8 x i16> + res_i = vec_extract(vi, param_i); // CHECK: extractelement <4 x i32> + res_ui = vec_extract(vui, param_i); // CHECK: extractelement <4 x i32> + res_f = vec_extract(vf, param_i); // CHECK: extractelement <4 x float> + + /* vec_insert */ + res_vsc = vec_insert(param_sc, vsc, param_i); // CHECK: insertelement <16 x i8> + res_vuc = vec_insert(param_uc, vuc, param_i); // CHECK: insertelement <16 x i8> + res_vs = vec_insert(param_s, vs, param_i); // CHECK: insertelement <8 x i16> + res_vus = vec_insert(param_us, vus, param_i); // CHECK: insertelement <8 x i16> + res_vi = vec_insert(param_i, vi, param_i); // CHECK: insertelement <4 x i32> + res_vui = vec_insert(param_ui, vui, param_i); // CHECK: insertelement <4 x i32> + res_vf = vec_insert(param_f, vf, param_i); // CHECK: insertelement <4 x float> + + /* vec_lvlx */ + res_vsc = vec_lvlx(0, ¶m_sc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vsc = vec_lvlx(0, &vsc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvlx(0, ¶m_uc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvlx(0, &vuc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbc = vec_lvlx(0, &vbc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvlx(0, ¶m_s); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvlx(0, &vs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvlx(0, ¶m_us); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvlx(0, &vus); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbs = vec_lvlx(0, &vbs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vp = vec_lvlx(0, &vp); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvlx(0, ¶m_i); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvlx(0, &vi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvlx(0, ¶m_ui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvlx(0, &vui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbi = vec_lvlx(0, &vbi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vf = vec_lvlx(0, &vf); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + /* vec_lvlxl */ + res_vsc = vec_lvlxl(0, ¶m_sc); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vsc = vec_lvlxl(0, &vsc); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvlxl(0, ¶m_uc); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvlxl(0, &vuc); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbc = vec_lvlxl(0, &vbc); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvlxl(0, ¶m_s); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvlxl(0, &vs); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvlxl(0, ¶m_us); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvlxl(0, &vus); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbs = vec_lvlxl(0, &vbs); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vp = vec_lvlxl(0, &vp); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvlxl(0, ¶m_i); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvlxl(0, &vi); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvlxl(0, ¶m_ui); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvlxl(0, &vui); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbi = vec_lvlxl(0, &vbi); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vf = vec_lvlxl(0, &vf); // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + /* vec_lvrx */ + res_vsc = vec_lvrx(0, ¶m_sc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vsc = vec_lvrx(0, &vsc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvrx(0, ¶m_uc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvrx(0, &vuc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbc = vec_lvrx(0, &vbc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvrx(0, ¶m_s); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvrx(0, &vs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvrx(0, ¶m_us); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvrx(0, &vus); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbs = vec_lvrx(0, &vbs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vp = vec_lvrx(0, &vp); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvrx(0, ¶m_i); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvrx(0, &vi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvrx(0, ¶m_ui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvrx(0, &vui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbi = vec_lvrx(0, &vbi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vf = vec_lvrx(0, &vf); // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + /* vec_lvrxl */ + res_vsc = vec_lvrxl(0, ¶m_sc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vsc = vec_lvrxl(0, &vsc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvrxl(0, ¶m_uc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vuc = vec_lvrxl(0, &vuc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbc = vec_lvrxl(0, &vbc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvrxl(0, ¶m_s); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vs = vec_lvrxl(0, &vs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvrxl(0, ¶m_us); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vus = vec_lvrxl(0, &vus); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbs = vec_lvrxl(0, &vbs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vp = vec_lvrxl(0, &vp); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvrxl(0, ¶m_i); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vi = vec_lvrxl(0, &vi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvrxl(0, ¶m_ui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vui = vec_lvrxl(0, &vui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vbi = vec_lvrxl(0, &vbi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + res_vf = vec_lvrxl(0, &vf); // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvxl + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + + /* vec_stvlx */ + vec_stvlx(vsc, 0, ¶m_sc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vsc, 0, &vsc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vuc, 0, ¶m_uc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vuc, 0, &vuc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vbc, 0, &vbc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vs, 0, ¶m_s); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vs, 0, &vs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vus, 0, ¶m_us); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vus, 0, &vus); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vbs, 0, &vbs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vp, 0, &vp); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vi, 0, ¶m_i); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vi, 0, &vi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vui, 0, ¶m_ui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vui, 0, &vui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vbi, 0, &vbi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvlx(vf, 0, &vf); // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + /* vec_stvlxl */ + vec_stvlxl(vsc, 0, ¶m_sc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vsc, 0, &vsc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vuc, 0, ¶m_uc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vuc, 0, &vuc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vbc, 0, &vbc); // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vs, 0, ¶m_s); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vs, 0, &vs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vus, 0, ¶m_us); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vus, 0, &vus); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vbs, 0, &vbs); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vp, 0, &vp); // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vi, 0, ¶m_i); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vi, 0, &vi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vui, 0, ¶m_ui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vui, 0, &vui); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vbi, 0, &vbi); // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvlxl(vf, 0, &vf); // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvx + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + /* vec_stvrx */ + vec_stvrx(vsc, 0, ¶m_sc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vsc, 0, &vsc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vuc, 0, ¶m_uc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vuc, 0, &vuc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vbc, 0, &vbc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vs, 0, ¶m_s); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vs, 0, &vs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vus, 0, ¶m_us); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vus, 0, &vus); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vbs, 0, &vbs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vp, 0, &vp); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vi, 0, ¶m_i); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vi, 0, &vi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vui, 0, ¶m_ui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vui, 0, &vui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vbi, 0, &vbi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + vec_stvrx(vf, 0, &vf); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvx + + /* vec_stvrxl */ + vec_stvrxl(vsc, 0, ¶m_sc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vsc, 0, &vsc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vuc, 0, ¶m_uc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vuc, 0, &vuc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vbc, 0, &vbc); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <16 x i8> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vs, 0, ¶m_s); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vs, 0, &vs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vus, 0, ¶m_us); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vus, 0, &vus); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vbs, 0, &vbs); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vp, 0, &vp); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <8 x i16> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vi, 0, ¶m_i); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vi, 0, &vi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vui, 0, ¶m_ui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vui, 0, &vui); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vbi, 0, &vbi); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x i32> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + vec_stvrxl(vf, 0, &vf); // CHECK: @llvm.ppc.altivec.lvx + // CHECK: store <4 x float> zeroinitializer + // CHECK: @llvm.ppc.altivec.lvsl + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.lvsr + // CHECK: @llvm.ppc.altivec.vperm + // CHECK: @llvm.ppc.altivec.stvxl + + /* vec_promote */ + res_vsc = vec_promote(param_sc, 0); // CHECK: store <16 x i8> zeroinitializer + // CHECK: insertelement <16 x i8> + + res_vuc = vec_promote(param_uc, 0); // CHECK: store <16 x i8> zeroinitializer + // CHECK: insertelement <16 x i8> + + res_vs = vec_promote(param_s, 0); // CHECK: store <8 x i16> zeroinitializer + // CHECK: insertelement <8 x i16> + + res_vus = vec_promote(param_us, 0); // CHECK: store <8 x i16> zeroinitializer + // CHECK: insertelement <8 x i16> + + res_vi = vec_promote(param_i, 0); // CHECK: store <4 x i32> zeroinitializer + // CHECK: insertelement <4 x i32> + + res_vui = vec_promote(param_ui, 0); // CHECK: store <4 x i32> zeroinitializer + // CHECK: insertelement <4 x i32> + + res_vf = vec_promote(param_f, 0); // CHECK: store <4 x float> zeroinitializer + // CHECK: insertelement <4 x float> + + /* vec_splats */ + res_vsc = vec_splats(param_sc); // CHECK: insertelement <16 x i8> + + res_vuc = vec_splats(param_uc); // CHECK: insertelement <16 x i8> + + res_vs = vec_splats(param_s); // CHECK: insertelement <8 x i16> + + res_vus = vec_splats(param_us); // CHECK: insertelement <8 x i16> + + res_vi = vec_splats(param_i); // CHECK: insertelement <4 x i32> + + res_vui = vec_splats(param_ui); // CHECK: insertelement <4 x i32> + + res_vf = vec_splats(param_f); // CHECK: insertelement <4 x float> + /* ------------------------------ predicates -------------------------------------- */ - /* vec_all_eq */ + /* vec_all_eq */ res_i = vec_all_eq(vsc, vsc); // CHECK: @llvm.ppc.altivec.vcmpequb.p res_i = vec_all_eq(vsc, vbc); // CHECK: @llvm.ppc.altivec.vcmpequb.p res_i = vec_all_eq(vuc, vuc); // CHECK: @llvm.ppc.altivec.vcmpequb.p @@ -2097,3 +3052,75 @@ void test6() { /* vec_any_out */ res_i = vec_any_out(vf, vf); // CHECK: @llvm.ppc.altivec.vcmpbfp.p } + +/* ------------------------------ Relational Operators------------------------------- */ +// CHECK: define void @test7 +void test7() { + vector signed char vsc1 = (vector signed char)(-1); + vector signed char vsc2 = (vector signed char)(-2); + res_i = (vsc1 == vsc2); // CHECK: @llvm.ppc.altivec.vcmpequb.p(i32 2 + res_i = (vsc1 != vsc2); // CHECK: @llvm.ppc.altivec.vcmpequb.p(i32 0 + res_i = (vsc1 < vsc2); // CHECK: @llvm.ppc.altivec.vcmpgtsb.p(i32 2 + res_i = (vsc1 > vsc2); // CHECK: @llvm.ppc.altivec.vcmpgtsb.p(i32 2 + res_i = (vsc1 <= vsc2); // CHECK: @llvm.ppc.altivec.vcmpgtsb.p(i32 0 + res_i = (vsc1 >= vsc2); // CHECK: @llvm.ppc.altivec.vcmpgtsb.p(i32 0 + vector unsigned char vuc1 = (vector unsigned char)(1); + vector unsigned char vuc2 = (vector unsigned char)(2); + res_i = (vuc1 == vuc2); // CHECK: @llvm.ppc.altivec.vcmpequb.p(i32 2 + res_i = (vuc1 != vuc2); // CHECK: @llvm.ppc.altivec.vcmpequb.p(i32 0 + res_i = (vuc1 < vuc2); // CHECK: @llvm.ppc.altivec.vcmpgtub.p(i32 2 + res_i = (vuc1 > vuc2); // CHECK: @llvm.ppc.altivec.vcmpgtub.p(i32 2 + res_i = (vuc1 <= vuc2); // CHECK: @llvm.ppc.altivec.vcmpgtub.p(i32 0 + res_i = (vuc1 >= vuc2); // CHECK: @llvm.ppc.altivec.vcmpgtub.p(i32 0 + vector short vs1 = (vector short)(-1); + vector short vs2 = (vector short)(-2); + res_i = (vs1 == vs2); // CHECK: @llvm.ppc.altivec.vcmpequh.p(i32 2 + res_i = (vs1 != vs2); // CHECK: @llvm.ppc.altivec.vcmpequh.p(i32 0 + res_i = (vs1 < vs2); // CHECK: @llvm.ppc.altivec.vcmpgtsh.p(i32 2 + res_i = (vs1 > vs2); // CHECK: @llvm.ppc.altivec.vcmpgtsh.p(i32 2 + res_i = (vs1 <= vs2); // CHECK: @llvm.ppc.altivec.vcmpgtsh.p(i32 0 + res_i = (vs1 >= vs2); // CHECK: @llvm.ppc.altivec.vcmpgtsh.p(i32 0 + vector unsigned short vus1 = (vector unsigned short)(1); + vector unsigned short vus2 = (vector unsigned short)(2); + res_i = (vus1 == vus2); // CHECK: @llvm.ppc.altivec.vcmpequh.p(i32 2 + res_i = (vus1 != vus2); // CHECK: @llvm.ppc.altivec.vcmpequh.p(i32 0 + res_i = (vus1 < vus2); // CHECK: @llvm.ppc.altivec.vcmpgtuh.p(i32 2 + res_i = (vus1 > vus2); // CHECK: @llvm.ppc.altivec.vcmpgtuh.p(i32 2 + res_i = (vus1 <= vus2); // CHECK: @llvm.ppc.altivec.vcmpgtuh.p(i32 0 + res_i = (vus1 >= vus2); // CHECK: @llvm.ppc.altivec.vcmpgtuh.p(i32 0 + vector int vi1 = (vector int)(-1); + vector int vi2 = (vector int)(-2); + res_i = (vi1 == vi2); // CHECK: @llvm.ppc.altivec.vcmpequw.p(i32 2 + res_i = (vi1 != vi2); // CHECK: @llvm.ppc.altivec.vcmpequw.p(i32 0 + res_i = (vi1 < vi2); // CHECK: @llvm.ppc.altivec.vcmpgtsw.p(i32 2 + res_i = (vi1 > vi2); // CHECK: @llvm.ppc.altivec.vcmpgtsw.p(i32 2 + res_i = (vi1 <= vi2); // CHECK: @llvm.ppc.altivec.vcmpgtsw.p(i32 0 + res_i = (vi1 >= vi2); // CHECK: @llvm.ppc.altivec.vcmpgtsw.p(i32 0 + vector unsigned int vui1 = (vector unsigned int)(1); + vector unsigned int vui2 = (vector unsigned int)(2); + res_i = (vui1 == vui2); // CHECK: @llvm.ppc.altivec.vcmpequw.p(i32 2 + res_i = (vui1 != vui2); // CHECK: @llvm.ppc.altivec.vcmpequw.p(i32 0 + res_i = (vui1 < vui2); // CHECK: @llvm.ppc.altivec.vcmpgtuw.p(i32 2 + res_i = (vui1 > vui2); // CHECK: @llvm.ppc.altivec.vcmpgtuw.p(i32 2 + res_i = (vui1 <= vui2); // CHECK: @llvm.ppc.altivec.vcmpgtuw.p(i32 0 + res_i = (vui1 >= vui2); // CHECK: @llvm.ppc.altivec.vcmpgtuw.p(i32 0 + vector float vf1 = (vector float)(1.0); + vector float vf2 = (vector float)(2.0); + res_i = (vf1 == vf2); // CHECK: @llvm.ppc.altivec.vcmpeqfp.p(i32 2 + res_i = (vf1 != vf2); // CHECK: @llvm.ppc.altivec.vcmpeqfp.p(i32 0 + res_i = (vf1 < vf2); // CHECK: @llvm.ppc.altivec.vcmpgtfp.p(i32 2 + res_i = (vf1 > vf2); // CHECK: @llvm.ppc.altivec.vcmpgtfp.p(i32 2 + res_i = (vf1 <= vf2); // CHECK: @llvm.ppc.altivec.vcmpgefp.p(i32 2 + res_i = (vf1 >= vf2); // CHECK: @llvm.ppc.altivec.vcmpgefp.p(i32 2 +} + +/* ------------------------------- increment/decrement: ----------------------------- */ +// CHECK: define void @test8 +void test8() { + vector int vi; + vi++; // CHECK: add nsw <4 x i32> {{.*}} <i32 1, i32 1, i32 1, i32 1> + vector unsigned int vui; + --vui; // CHECK: add <4 x i32> {{.*}} <i32 -1, i32 -1, i32 -1, i32 -1> + vector float vf; + vf++; // CHECK: fadd <4 x float> {{.*}} <float 1.000000e+{{0+}}, float 1.000000e+{{0+}}, float 1.000000e+{{0+}}, float 1.000000e+{{0+}}> +} |